You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

广告加载后能否移除?油猴脚本执行顺序及Tampermonkey配置疑问

解决广告加载后再执行去广告脚本的问题

我之前也碰到过这种动态广告加载导致脚本失效的情况,核心问题就是广告不是页面初始DOM的一部分,而是后续通过JS动态插入的,所以即使脚本在页面加载完成后运行,也赶不上广告的加载时机。下面分两个浏览器的情况给你具体解决方案:

Firefox + Greasemonkey

1. 先调整脚本运行时机

首先可以试试修改脚本的@run-at指令,Greasemonkey默认是document-end,你可以改成:

// @run-at document-idle

这个选项会等到页面所有资源(包括大部分动态脚本)加载完成后再执行,但如果广告是延迟加载的(比如滚动到某个位置才加载),这个方法可能还是不够。

2. 监听DOM变化(终极方案)

对于动态插入的广告,最可靠的方式是用MutationObserver来监听DOM的新增元素,一旦广告元素出现就立即移除。举个简单的例子:

// 替换成你实际要移除的广告元素选择器,比如广告的class是"ad-box"
const adSelector = ".ad-box";

// 创建DOM变化观察者
const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    // 检查新增节点里的广告元素
    const ads = document.querySelectorAll(adSelector);
    ads.forEach(ad => ad.remove());
  });
});

// 配置监听范围:监听body下所有子节点的新增
observer.observe(document.body, {
  childList: true,
  subtree: true
});

// 先移除页面已加载的广告
document.querySelectorAll(adSelector).forEach(ad => ad.remove());

这个脚本会持续监听页面DOM的变化,不管广告什么时候加载,只要出现就会被移除。

Chrome + Tampermonkey

你提到配置了运行时选项但无效,大概率是因为广告是动态异步加载的,单纯调整运行时机还是追不上广告的加载节奏。Tampermonkey的@run-at选项和Greasemonkey逻辑一致,你可以先确认脚本里有没有设置正确的指令:

// @run-at document-idle

如果还是不行,同样需要用上文的MutationObserver方法,这个方案在两个浏览器是通用的。另外,你可以在脚本开头加一行日志,看看脚本实际执行的时间:

console.log("去广告脚本执行时间:", new Date().toLocaleString());

然后在浏览器开发者工具的Network面板里看广告请求的加载时间,对比一下就能明确是不是脚本执行太早了。

另外,有些网站会刻意隐藏广告元素的特征,这时候你可能需要调整广告选择器——比如通过父元素的class、属性来定位广告,而不是只看广告本身的标识。

内容的提问来源于stack exchange,提问作者Permafr0st

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:28:17