开源的 puppeteer-extra-plugin-stealth 替代方案
给 Puppeteer 加装规避脚本,stealth 插件仍是安装量最大的方式,每周下载量超过一百万次,但它自 2023 年 3 月以来就没有发布过新版本。每个规避脚本都是原版 Chrome 上的 JavaScript 补丁,而 JavaScript 补丁会自我暴露。Clearcote 则在引擎中原生地设置这些值。
puppeteer-extra-plugin-stealth 是什么?
puppeteer-extra-plugin-stealth(由 berstend 开发)是一组 JavaScript 规避模块,在页面脚本运行之前通过 page.evaluateOnNewDocument 注入。每个模块修补一个破绽:navigator.webdriver、插件、chrome.runtime、WebGL 厂商、iframe、编解码器等等。它采用 MIT 许可,极受欢迎,npm 周下载量超过一百万次,其思路也被移植到了 playwright-stealth 和 selenium-stealth。
它实际上也已无人维护:最后一个 npm 版本(2.11.2)发布于 2023 年 3 月,此后仓库再没有提交过代码。而结构上的局限在此之前就已存在。这些都是原版引擎上的 JavaScript 覆盖,而覆盖会通过 Function.prototype.toString、被改动的属性描述符,以及在补丁未生效的 Web Worker 或跨域 iframe 中重新读取而暴露。它不修改原生值,不触及 TLS 或 HTTP/2,也不处理 Runtime.enable 这个 CDP 泄露。它自己的 README 也承认,要堵住所有检测无头 Chromium 的途径,很可能是做不到的。
Clearcote 与 puppeteer-extra-plugin-stealth 对比
| 功能 | Clearcote | puppeteer-extra-plugin-stealth |
|---|---|---|
| 实现方式 | 引擎层面的 C++ 补丁:原生值 | 按文档注入的 JavaScript 规避脚本 |
| 可被检测的痕迹 | 无:所有 realm(页面、worker、iframe)中都是原生值 | 可通过 toString、属性描述符、worker 和 iframe 重新读取发现 |
| TLS / 网络层一致性 | 跟随所声明的 Chrome(JA3/JA4 + HTTP/2) | 未处理 |
| 框架 | Playwright 与 Puppeteer(Python、Node、.NET) | Puppeteer(Node);Playwright 可用 playwright-extra |
| 维护状态 | 活跃 | 最后一次发布于 2023 年 3 月 |
| 许可证 | 开源版构建:BSD-3 | MIT |
| 费用 | 开源版构建免费;最新构建凭 GitHub 免费使用 | 免费开源 |
对比整理于 2026年11月。puppeteer-extra-plugin-stealth 的许可方式:开源(MIT);细节可能会变化,请以其项目的最新信息为准。
实测:12 款工具,同样的 10 个网站
我们运行了开源的 browsers-benchmark 测试框架共 5 次,最后一次于 2026年10月27日 完成。每个工具都使用独立的美国住宅 IP,且每次运行的顺序都不同。“通过”表示该框架针对该网站的自带检查找到了页面本身,而不是拦截页或验证页。 Clearcote 在 Windows 台式机上测量(最新构建);其他工具在 Linux 服务器上测量。
puppeteer-extra-plugin-stealth 不在此次基准测试中:该测试框架没有它的驱动。表格列出的是框架支持的工具。
| 工具 | 有头 | 无头 |
|---|---|---|
| Clearcote0.63.2 · r52 | 78%39/50 | 80%40/50 |
| Camoufox0.5.8 · v156.0.1-beta.36 | 72%36/50 | 80%40/50 |
| Invisible Playwright0.43.0 · Firefox | 76%38/50 | 78%39/50 |
| CloakBrowser0.6.4 | 74%37/50 | 64%32/50 |
| SeleniumBase (CDP mode)4.49.0 · Chrome | 74%37/50 | — |
| nodriver0.50.6 · Chrome | 74%37/50 | 40%20/50 |
| Zendriver0.17.1 · Chrome | 64%32/50 | 60%30/50 |
| tf-playwright-stealth (Firefox)1.2.0 | 58%29/50 | 62%31/50 |
| tf-playwright-stealth (Chromium)1.2.0 | 56%28/50 | 50%25/50 |
| Playwright (Chromium)1.62.0 | 56%28/50 | 30%15/50 |
| Playwright (Firefox)1.62.0 | 54%27/50 | 54%27/50 |
| Patchright1.64.3 · Chrome | 24%12/50 | 26%13/50 |
网站:搜索结果页, 社区论坛, 软件公司网站, 奢侈品零售商, 电商平台商品页, 票务网站, 时装零售商, 旅行预订网站, 航空公司, 社交网络。 这只是一个网络环境、一周时间内的快照:结果会随每次发布、每个代理以及网站本身而变化,而且没有任何工具每次都能加载每个网站。原始结果(JSON)。
团队为什么选择 Clearcote
原生实现,而非覆盖
stealth 插件的每个规避脚本都是检测方能抓到的 JavaScript 覆盖。Clearcote 在引擎中设置这些值,读起来就是原生值,也就没有覆盖可找。
跨 realm 一致
应用在页面上的 JavaScript 补丁,在 Web Worker 和跨域 iframe 中会出现不一致。引擎层面的值处处一致,从而消除了这一类破绽。
网络层
该插件无法触及 TLS 或 HTTP/2。Clearcote 的握手跟随所声明的 Chrome 版本,因此网络层的表现与 JavaScript 一致。
持续维护,经过验证
Clearcote 每次发布都会用公开测试进行检验。该插件的规避脚本停留在 2023 年初,而 Chrome 此后已经前进了几十个版本。
什么情况下 puppeteer-extra-plugin-stealth 可能更合适
- 你已经在用 Puppeteer,想用一行代码为检测宽松的目标加上一整套规避脚本。
- 你需要一个 MIT 许可的方案,直接接入现有的 Node 爬虫。
- 对于公开测试页和较老的检测手段,它上手快,有时也够用。
常见问题
puppeteer-extra-plugin-stealth 还在维护吗?
已不再积极维护。最后一个 npm 版本 2.11.2 发布于 2023 年 3 月,此后仓库再没有任何提交。它仍然可以安装,使用量也很大,但其规避脚本已经跟不上 Chrome 的步伐。
为什么 JavaScript stealth 补丁会被检测到?
因为它们是对真实函数的覆盖。检测方可以把函数转成字符串(原生函数显示 [native code],覆盖函数则会暴露自己的源码),检查属性描述符,或者在补丁没有生效的新 iframe 或 Web Worker 中重新读取该值。引擎层面的修改让值在任何地方都是原生的,从而避免了这个问题。
Clearcote 和 stealth 插件有什么不同?
该插件向原版 Chrome 注入 JavaScript 规避脚本;Clearcote 是修改版 Chromium,这些值在引擎中就是原生的,在 worker 和 iframe 之间保持一致,还有该插件无法触及的 TLS/HTTP-2 身份画像。
有 Playwright 版本吗?
有:playwright-extra 可以在 Node 中加载同一个插件,playwright-stealth 则把它移植到了 Python。两者都沿用同样的 JavaScript 覆盖设计。
补丁数是我们比较过的任何分支的两倍以上。
按方案统计编译进 Chromium 的补丁。基于脚本的工具完全不改动引擎。
隐身插件
例如 puppeteer-extra-plugin-stealth
打过补丁的驱动
例如 undetected-chromedriver、nodriver
其他 Chromium 分支
免费版与付费版构建
Clearcote Pro
r57,Chromium 156
公开的补丁数,截至 2026年10月。区间涵盖其他分支的免费版与付费版构建;Clearcote 的数字来自 Pro 版构建。
相关阅读
试试这款开源 Chromium 替代方案
免费开源,可直接接入 Playwright 与 Puppeteer,一直到 TLS 握手都保持一致。
一个浏览器免费:GitHub、银行卡验证或公司 Google 账号。绝不扣款。