本文目录导读:

- 📖 目录导读
- 为什么要自定义广告拦截规则?
- 主流广告过滤工具的规则机制解析
- 自定义规则的基础语法与核心写法
- 七步实战:从零搭建你的专属黑名单
- 常见问题与高频错误排查(附问答)
- 高级技巧:白名单、正则与动态内容过滤
- 总结与推荐工具清单
📖 目录导读
- 为什么要自定义广告拦截规则?
- 主流广告过滤工具的规则机制解析
- 自定义规则的基础语法与核心写法
- 七步实战:从零搭建你的专属黑名单
- 常见问题与高频错误排查(附问答)
- 高级技巧:白名单、正则与动态内容过滤
- 总结与推荐工具清单
为什么要自定义广告拦截规则?
大多数用户使用广告过滤工具(如AdGuard、uBlock Origin、Adblock Plus)时,默认启用的是第三方维护的“公共规则列表”(如EasyList、ChinaList),这些列表能拦截约70%-80%的常见广告,但存在三个致命缺陷:
- 漏拦:某些网站的自定义弹窗、非标准广告位未被覆盖;
- 误杀:将网站的正常功能代码(如支付接口、评论区)误判为广告;
- 时效差:公共规则更新滞后,新上线的广告形式可能需要数天才能被封杀。
自定义规则的价值:你可以精准控制“拦什么、不拦什么”,并立刻解决最新出现的广告骚扰,你访问某个博客时,发现右下角总会弹出一个“微信文章推广”浮动框,但公共规则没拦截——此时只需写下一条自定义规则即可秒杀。
主流广告过滤工具的规则机制解析
目前主流工具均遵循 Adblock Plus 规则语法(社区通用标准),其核心逻辑是:
- 基于URL的过滤:拦截特定链接(图片、JS文件、iframe等);
- 基于DOM元素的隐藏:通过CSS选择器隐藏页面上的广告区块;
- 基于请求类型的过滤:指定拦截脚本(script)、图片(image)、视频(media)等。
工具差异:
- uBlock Origin:性能极佳,支持动态规则和“元素选择器”实时取色;
- AdGuard:具备独立的桌面端和浏览器扩展,规则写法更支持“正则表达式”;
- Adblock Plus:语法最基础,兼容性最广。
自定义规则的基础语法与核心写法
1 最简单的规则:完整地址拦截
||example.com/bad-ad.js
含义:拦截所有来自 example.com 域名的 bad-ad.js 文件(注意双竖线表示“任何子域名”)。
2 通配符规则(匹配模糊路径)
||example.com/ad/*
拦截example.com域名下ad文件夹中的所有内容。
3 域名范围限定(仅限某网站生效)
example.com##.ad-container
含义:仅在example.com这个网站上隐藏类名为ad-container的HTML元素。(双井号表示CSS选择器隐藏)
4 完整语法结构(可叠加)
域名$domain=禁止域名,类型=image,third-party
七步实战:从零搭建你的专属黑名单
场景:某技术社区(假定域名为 techdemo.net)在文章底部插入了一个“推荐课程”浮动框,该框每30秒自动刷新广告。
第一步:监测广告元素
打开浏览器的“开发者工具”(F12),点击“选择元素”按钮,指向广告浮动框,查看HTML代码,发现该元素具有唯一的ID:#float-course-ad。
第二步:编写隐藏规则(最安全)
在广告过滤工具的“自定义规则”页面输入:
techdemo.net##div#float-course-ad
这条规则会直接隐藏该元素,不影响其他功能。
第三步:检测误杀
刷新页面,确认浮动框消失,同时检查评论区、侧边栏等区域是否异常,若底部的“相关文章”栏也被隐藏,说明CSS选择器写得过宽,需改为:
techdemo.net##div#float-course-ad > .ad-inner
第四步:如果广告是iframe嵌入的
若广告来自第三方服务器,adtech-cdn.com,则使用URL拦截:
||adtech-cdn.com^
注意结尾的 表示“分隔符”,防止拦截类似 adtech-cdn.com.org 这类无关域名。
第五步:处理动态加载的脚本广告
如果广告是通过JavaScript动态插入的,URL拦截可能错过,此时写一条“脚本拦截”规则:
techdemo.net##script:has-text(adtech)
含义:隐藏techdemo.net上任何包含“adtech”文字的脚本标签(注意部分工具需要开启“高级用户”模式)。
第六步:测试与微调
刷新后广告依然存在,尝试在规则后添加 $important(强制执行):
techdemo.net##div#float-course-ad $important
第七步:导出与备份
将自定义规则导出为文本文件,定期备份,常用工具都支持“规则列表”导入导出功能。
常见问题与高频错误排查(附问答)
Q1:我写了一条规则,广告却完全没变化?
A:请检查以下三点:
- 规则末尾是否缺少空格或符号(如 后必须直接跟选择器);
- 域名是否写成了完整URL?应只写
domain.com,不能带https://; - 广告是否是通过Service Worker或WebSocket推送的?这类广告需要拦截其通讯协议(需配合扩展如NoScript)。
Q2:自定义规则误杀了网页的正常按钮?
A:立即将规则中的CSS选择器收窄,改用更具体的class或id,将 .btn-ad 改为 div.sidebar > .btn-ad。
Q3:某个网站强制我关闭广告拦截才能看内容?
A:使用“反反广告拦截”规则(工具自带的Anti-Adblock列表),或编写一条“欺骗”规则,让网站以为广告被加载了:
@@||example.com/ad-script.js$script
双@表示“例外规则”,不对这个脚本做拦截。
Q4:我在手机上也能用自定义规则吗?
A:可以,AdGuard for Android/iOS 支持导入相同语法的规则文件;部分浏览器扩展(如Kiwi Browser上的uBlock Origin)同样支持。
高级技巧:白名单、正则与动态内容过滤
1 白名单(避免误杀)
如果某个安全监控工具(如 trustedsite.com/script.js)被公共列表误拦,添加:
@@||trustedsite.com^$domain=你的银行官网.com
含义:仅在银行官网上放行 trustedsite.com 的所有请求。
2 正则表达式(用于变形广告)
某些广告链接后带随机代码(如 /ad/20231223/abc/),可写:
/^https?:\/\/.*\.adserver\.com\/\d+\/.*$/ $image
注意:正则会消耗更多性能,仅建议在难以用普通通配符匹配时使用,部分工具(如AdGuard)默认支持,uBlock Origin需要开启“实验性功能”。
3 处理动态插入的广告(MutationObserver防御)
如果广告是通过JavaScript监听滚动事件后插入的,写基于DOM的“不匹配规则”:
techdemo.net##+js(acis, #float-course-ad)
这条规则会主动移除由脚本生成id为#float-course-ad的元素。
(注:不同工具语法略有差异,AdGuard使用+js,uBlock Origin使用##script:inject)
总结与推荐工具清单
自定义广告拦截规则的精髓在于:精确监测 → 逐步缩小范围 → 测试后固化。
- 新手起步:从隐藏元素()和简单URL拦截()开始;
- 进阶优化:学习正则和注入防御;
- 日常维护:每隔两周检查常用网站,针对新广告快速写一条规则。
推荐工具(均为开源或免费):
| 工具名称 | 平台支持 | 自定义友好度 |
|---|---|---|
| uBlock Origin | 浏览器扩展(Chrome/Firefox/Edge) | ★★★★★ 极高性能,规则即时生效 |
| AdGuard for Desktop | Windows/Mac 客户端 | ★★★★☆ 支持HTTPS过滤,规则同步 |
| Adblock Plus | 浏览器扩展 | ★★★☆☆ 语法标准,但性能稍弱 |
| Pi-hole | 树莓派/路由器 | ★★★☆☆ 硬件级拦截,适合全屋网络 |
提示:不要同时启用多个广告过滤工具,否则会引起规则冲突,导致页面卡顿或日志混乱,选定一个核心工具后,将其它工具禁用或设为“仅白名单模式”。
最后一句:学会自定义规则才算真正掌控了广告过滤的主动权,从此上网清净,仅需一键修正任何讨厌的弹窗。