爱意满满的作品展示区。
june4

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

  •  
  •   june4 · 2 days ago · 1221 views

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

    随手写的,原理很简单,就是找到推主名字或推文里有关键词的,全部 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)
    })();
    
    9 replies    2026-08-17 09:51:49 +08:00
    Quarter
        1
    Quarter  
       2 days ago via Android
    啊,很熟悉的关键词啊,都快变成精神污染了
    badrigtpatbas247
        2
    badrigtpatbas247  
       1 day ago via Android
    建议打扫黑除恶电话举报
    JunJian
        3
    JunJian  
       1 day ago
    直接在 https://x.com/settings/muted_keywords 设置就好了
    Need4more
        5
    Need4more  
       1 day ago
    @JunJian 这个支持评论区的屏蔽吗?
    Wyearn
        6
    Wyearn  
       1 day ago
    x 的垃圾机器人真的是太多了
    ZhaokunZhang
        7
    ZhaokunZhang  
       1 day ago
    @Need4more 评论区不行,我试验过
    JunJian
        8
    JunJian  
       9h 15m ago
    @ZhaokunZhang 可以屏蔽评论区,我就是设置来屏蔽评论区的,但是个别中文词无法屏蔽,x 平台有 bug
    june4
        9
    june4  
    OP
       8h 33m ago
    @JunJian 似乎不行,我昨天试试加了个“比她骚的”,然后今天一看还是有一串比她骚的评论。不过可能确实如你说的有些词不行。另外这个关键字对用户名起不起作用?如果不起,那也没用啊。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3875 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 115ms · UTC 10:25 · PVG 18:25 · LAX 03:25 · JFK 06:25
    ♥ Do have faith in what you're doing.