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

june4 2026-08-15 17:08 1

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


随手写的,原理很简单,就是找到推主名字或推文里有关键词的,全部 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)
})();
最新回复 (7)
  • Quarter 08-15 17:45
    1
    啊,很熟悉的关键词啊,都快变成精神污染了
  • badrigtpatbas247 08-15 18:48
    2
    建议打扫黑除恶电话举报
  • JunJian 08-15 20:54
    3
    直接在 https://x.com/settings/muted_keywords 设置就好了
  • tyzrj766 08-15 21:17
    4
    https://github.com/foru17/make-x-great-again
  • Need4more 08-15 23:41
    5
    @JunJian 这个支持评论区的屏蔽吗?
  • Wyearn 08-16 10:00
    6
    x 的垃圾机器人真的是太多了
  • ZhaokunZhang 08-16 11:32
    7
    @Need4more 评论区不行,我试验过
* 帖子来源V2EX
返回