-
Notifications
You must be signed in to change notification settings - Fork 40
基本的过滤规则语法介绍
DOM 树示例:
<div id="unique-identifier" class="first-class second-class" data-storage="123-456">
<div class="first-class">
-
##
- 修饰规则必须包含该符号,表示这是修饰规则 -
##div
- 通过元素类型选择元素 -
###unique-identifier
- 通过id
、##
+#
选择元素,这样选择非常高效,因为页面就一个名为 unique identifier 的 id -
##.first-class
- 通过class
、##
+.
选择元素,但会匹配所有包含相同 class 的其他元素,因此就要: -
##.first-class.second-class
- 同时使用两个 class 只会选择上例中的第一行 DOM 元素
在多个 class 之间使用点号会自动在原先空格符号处分隔不同的 class 属性值。
通过属性选择元素:
-
##[data-storage="123-456"]
- 精确匹配 -
##[data-storage^="123-"]
- 从开头进行匹配 -
##[data-storage$="-456"]
- 从末尾进行匹配 -
##[data-storage*="3-4"]
- 从中间进行匹配 -
##[id="unique-identifier"]
等同于###unique-identifier
-
##[class="first-class"]
等同于##.first-class
,但只会匹配上例中的第二行 DOM 元素 - class 属性是在字面上进行比较,不会在按照空格符号进行分隔。
详情请参见这里的文档
下面的步骤需要用到浏览器的开发者工具,包括调调试器。如果你不熟悉这些工具,不妨了解一下官方提供的文档:
Firefox:https://firefox-source-docs.mozilla.org/devtools-user/
Chrome:https://developer.chrome.com/docs/devtools/
你也可以到这里了解更多关于开发者工具的更多信息:https://devtoolstips.org/
你还需要熟悉 HTML、CSS 以及 JavaScript(为了看懂检测脚本)方面的知识。
具体步骤:
1、选取并查看反广告过滤的元素。记录下这些元素的 ID、class、其他属性(例如 hidden
)、元素内的文本等等。
2、打开浏览器开发者工具,为 DOMContentLoaded
(在 DOM Mutation
下)添加一个断点并重新载入该页面。通常这么做会在反广告过滤弹窗显示之前暂停调试器。如果没有暂停,你可以尝试使用 Script First Statement
(在 Script
下)断点(但你或许稍后得重复点击暂停恢复按钮,以便在网站脚本执行之前跳过扩展脚本)。
3、调试器暂停后,移除该断点。重要提示:请勿恢复暂停的调试器,否则网站的检测脚本又会恢复运行。
4、选择 查看器 (Firefox) / 元素 (Chrome) 标签页,通过步骤1里记录的信息搜索对应的元素。
Chrome 魔法不显示搜索栏,请按
Ctrl+F
显示。 如果元素被 CSS(例如display: none;
)隐藏了,可以从右键菜单设置一个属性修改时
的断点。这样元素显示的时候会暂停调试器,避免脚本修改元素属性(例如class
)让它在检测时重新显示。如果反广告过滤的元素完全不存在,请查找该元素的父元素,并设置一个子树修改时
的断点(如果该父元素也不存在,那就找它的更上一级元素,以此类推)。这样就可以在元素插入到网页时暂停调试器。
5、现在你就可以随意恢复被暂停的调试器。
6、一旦网站检测的 uBO 并显示反广告过滤弹窗,浏览器就会在调试器里暂停检测代码。
7、有时,网站会用到诸如 jQuery 这样的库,调试器可能暂停的是这些库,而不是主脚本。这时你就得使用调试器的 Call stack
段落回到主脚本(提示:如果有“展开列”按钮,点击该按钮显示更多 call stack 里的脚本)。
8、使用浏览器源代码查看器的格式化代码功能(通过是像 {}
这样的按钮让你的源代码更美观。
9、如果代码看起来被混淆了,可以使用反混淆网站(请记住有些反混淆器无法支持所有脚本,即使它们用的是同样的混淆器进行混淆的)。
10、接下来你可以查看周围的其他代码。
顺便说一句:部分网站具有反调试功能,通过 JS 的 debugger
语句不断暂停调试器的运行。这种情况下,你可以开启 Deactivate breakpoints
选项 (Chrome) 或关闭 在调试器语句上暂停
选项 (Firefox)
为了对付这些检测代码,你得熟悉过滤规则语法、小脚本以及重定向资源。
这里显示了我们是如何在规则列表里修复反广告过滤的问题,值得你学习。
uBlock Origin - 一款支持 Chromium、Firefox 和 Safari 的高效过滤工具,快速且简洁