それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Twitterのおすすめユーザー(Who to Follow)が代わり映えしないので、消したい。ずっと同じ人がレコメンドされてる。

ツイッターのおすすめユーザがうざい。

もうね、3年近く同じユーザがレコメンドされてるのよ。リアルの職場の知り合いだから絶対フォローを押したくないの。ずっと出てくるの。

ツイッター「フォロー押すまで、帰らない」って居座り続けるんですよ。ええ私は、永遠にフォローを押すことは無いんですけど。むしろレコメンドされるユーザーは、ブロックしてもいいと思ってたりする。

「おすすめユーザ」を消す

そこで、CSSセレクタのマッチングを工夫して「非表示」にすることを試みた。ツイッターdiv[data-testid="cellInnerDiv"] に全部のコンテンツが入ってるし、ReactなのでCSSクラス名も不安定。

そこでCSSのクラス名以外で該当ボックスにマッチさせる必要があります。これがずいぶんと長い間出来なかったんです。Xpathを使ってました。

最近になって:has() セレクタがまともに使えるようになりました。

これで「〇〇を含む親ボックス」が取得可能になり、CSSセレクタによるコンテンツブロックがはかどるようになりました。

おすすめユーザを非表示にする例

! 2023-01-08 https://twitter.com
twitter.com##div[aria-label="Timeline"]>div[data-testid="cellInnerDiv"]:has(div[aria-label^="Follow"][data-testid$="follow"])
twitter.com##div[aria-label="Timeline"]>div[data-testid="cellInnerDiv"]:has(a[href^="/i/connect_people?user_id="])

従来は、次のようなXPATHを書く必要がありました。

twitter.com##:xpath(//div[@data-testid="cellInnerDiv"][ .//span[contains(., "Who to follow")]])
twitter.com##:xpath(//div[@data-testid="cellInnerDiv"][ .//span[contains(., "おすすめユーザ")]])
twitter.com##:xpath(//div[@data-testid="cellInnerDiv"][.//span[contains(., "Who to follow")]]/following-sibling::div[position()<4])

div[following-sibling::div[position()<4] で隣接ノードを絞り込むほうが確実なんですよね。

ちなみに、メッセージを消す例

メッセージ(DM)のボックス消したいと思う人は多いのではないでしょうか。

twitter.com##div[data-testid="DMDrawer"]
twitter.com##div[data-testid="DMDrawerHeader"]