分享一个极简 twitter/x 广告拉黑脚本

6 小时 3 分钟前
 june4

现在广告实在是多,影响看评论了。

随手写的,原理很简单,就是找到推主名字或推文里有关键词的,全部 mute 帐号。twitter 的 mute 数量似乎没有上限,放心用。

(function() {
  const AD = [
    /只入身体不入生活/,
    /我福不黑不信你看/,
    /有人想锐评一下我的福嘛/,
    /比我骚的没我好看/,
    /比她骚的没她好看/,
    /刷了半天的 X就她的主页/,
    /就她主页能打/,
    /就她的主页能打/,
    /刷了半天的 X/,
    /太涩了.*我真顶不住/,
    /体制内老师/,
    /没人比她 sao/,
    /线下 sao 货/,
    /比她 sao/,
    /比我 Sao/,
    /sao 的很/,
    /她好涩/,
    /体制内幼师/,
    /给你看福/,
    /免费破处/,
    /线下约见入口/,
    /返佣.+领取/,
    /催情.*听话/
  ]

  const sleep = ms => new Promise(r => setTimeout(r, ms))

  function kill(el) {
    const article = el.closest('article');
    if (!article) {
      console.info('[AdBlock] error: no article')
      return;
    }
    const btnArr = article.querySelectorAll('button[aria-haspopup="menu"][role="button"][data-testid="caret"]');
    if (btnArr.length !== 1) {
      console.info('[AdBlock]', 'error: btnArr.length', btnArr.length)
      return;
    }
    setTimeout(() => {
      btnArr[0].click();
      setTimeout(() => {
        const menuArr = document.querySelectorAll('div[data-testid="Dropdown"]');
        if (menuArr.length !== 1) {
          console.info('[AdBlock] error: menuArr.length', menuArr.length)
          return
        }
        for (const mi of menuArr[0].querySelectorAll('div[role="menuitem"]')) {
          console.log('[AdBlock] MenuItem:', mi.innerText);
          if (/^(隐藏|Mute)$/u.test(mi.innerText)) {
            console.log('[AdBlock] Exec Menu', mi.innerText);
            mi.click();
            break;
          }
        }
      }, 200);
    }, 10);
  }

  let killing = false
  async function killAll() {
    if (!/\/status\//.test(location.pathname)) return
    if (killing) return
    console.info('[AdBlockAll] start')
    killing = true

    const texts = document.querySelectorAll('div[data-testid="tweetText"],div[data-testid="User-Name"]')
    console.log('[AdBlockAll] text length:', texts.length)

    for (const text of texts) {
      const textContent = text.textContent
      for (const re of AD) {
        if (re.test(textContent)) {
          console.warn('[AdBlockAll] Found Ad!', textContent)
          kill(text)
          await sleep(1000)
        }
      }
    }

    killing = false
  }

  async function handleKeydown(ev) {
    if (!(ev.altKey && ev.shiftKey && !ev.ctrlKey && ev.key === 'K')) return;
    await killAll()
  }
  document.addEventListener('keydown', handleKeydown, true);

  setInterval(() => {
    killAll()
  }, 5000)
})();
379 次点击
所在节点    分享创造
4 条回复
Quarter
5 小时 26 分钟前
啊,很熟悉的关键词啊,都快变成精神污染了
badrigtpatbas247
4 小时 22 分钟前
建议打扫黑除恶电话举报
JunJian
2 小时 16 分钟前
直接在 https://x.com/settings/muted_keywords 设置就好了
tyzrj766
1 小时 54 分钟前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1234632

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX