Skip to content

Instantly share code, notes, and snippets.

@brunolm
Created November 30, 2024 20:09
Show Gist options
  • Save brunolm/ef550af45ed65c70487f723999d58b49 to your computer and use it in GitHub Desktop.
Save brunolm/ef550af45ed65c70487f723999d58b49 to your computer and use it in GitHub Desktop.
Block Ad accounts on X (Twitter) | UserScript | Tampermonkey
// ==UserScript==
// @name Block Ad accounts on X (Twitter)
// @namespace http://tampermonkey.net/
// @version 2024-11-30
// @description try to take over the world!
// @author You
// @match https://x.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=x.com
// @grant none
// ==/UserScript==
async function blockAdvertisers() {
const ads = Array.from(
document.querySelectorAll('[data-testid="tweet"] [style*="rgb"]')
).filter((ad) => /^Ad$/.test(ad.innerText));
for (const ad of ads) {
const tweet = ad.closest('[data-testid="tweet"]');
localStorage.__blockAdvertisers = localStorage.__blockAdvertisers || "{}";
const btn =
ad.parentElement.parentElement.parentElement.querySelector("button");
btn.click();
await new Promise((r) => setTimeout(r, 100));
const menu = document.querySelector('[role="menu"]');
const blockBtn = Array.from(
menu.querySelectorAll('div[role="menuitem"]')
).find((d) => /Block @/.test(d.innerText));
blockBtn.click();
await new Promise((r) => setTimeout(r, 100));
const okBtn = document.querySelector('[role="group"] button');
okBtn.click();
await new Promise((r) => setTimeout(r, 1000));
localStorage.__blockAdvertisers = JSON.stringify({
...JSON.parse(localStorage.__blockAdvertisers),
[tweet.querySelector("a").href.slice(1)]:
true,
});
const maybeLater = Array.from(document.querySelectorAll("button")).find(
(x) => /Maybe later/.test(x.innerText)
);
maybeLater?.click();
await new Promise((r) => setTimeout(r, 100));
}
}
blockAdvertisers();
setInterval(() => {
blockAdvertisers();
}, 5000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment