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

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

  •  
  •   june4 · 5h 29m ago · 354 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)
    })();
    
    4 replies    2026-08-15 21:17:03 +08:00
    Quarter
        1
    Quarter  
       4h 52m ago via Android
    啊,很熟悉的关键词啊,都快变成精神污染了
    badrigtpatbas247
        2
    badrigtpatbas247  
       3h 49m ago via Android
    建议打扫黑除恶电话举报
    JunJian
        3
    JunJian  
       1h 43m ago
    直接在 https://x.com/settings/muted_keywords 设置就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2878 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:38 · PVG 22:38 · LAX 07:38 · JFK 10:38
    ♥ Do have faith in what you're doing.