在这里插入图片描述

路易乔布斯 · 2026-05-14 · AI Daily 深度拆解

数据时间锚点:本文写作时 CloakHQ/CloakBrowser 数据为 10.4k stars / wrapper v0.3.28 / Chromium 146 / 57 个 C++ 补丁(Linux/Win)/ 16 个 release


一、又一个 🔥 重磅,但这次我决定先做尽职调查

今早 AI 日报第 9/10 条:

开源反检测浏览器通过全部 30 项机器人测试
CloakHQ 发布 CloakBrowser,基于 Chromium 深度修改指纹,通过全部 30 项机器人检测测试。

广告语很满:30/30 全通过、Playwright 即插即用、源码层面修补。

我点进去之前的本能反应不是兴奋,是怀疑。原因有三个:

  1. "30 项"是哪 30 项? 反爬产业里有几百种检测站,挑哪 30 个能"满分"?
  2. "源码层面修补"是真改 C++ 还是 wrap 个 launch flag? 这两件事差一个数量级。
  3. “Playwright drop-in” 是真零迁移成本,还是会有一堆不兼容的暗坑?

带着这三个问题,我把 GitHub README、CHANGELOG、CHANGELOG 之外的 RELEASE 列表、对比表、License 文件全读了一遍。这篇文章不是吹捧,是一次读 README 之外的尽职调查

读完你会知道:(1) 反爬战场为什么这么卷,(2) CloakBrowser 真的改了什么,(3) “30/30” 这个数字有多硬、多空,(4) 它和 4 个同类方案到底差在哪,(5) 你装上之后会踩到的 5 个坑。


二、反检测的世界为什么这么卷

先讲清楚战场。这样你看后面的技术细节才有锚点。

反爬产业链是一个永动循环:

你想抓数据 → 网站装反爬(Cloudflare/reCAPTCHA/FingerprintJS)
→ 你装反检测(playwright-stealth / undetected-chromedriver)
→ 网站升级检测(TLS 指纹、CDP 痕迹、行为分析)
→ 你升级反检测(Camoufox / CloakBrowser)
→ 网站再升级 → ......

为什么 Playwright 原版直接上场会输?因为它身上印着至少 5 个无伪装的"机器人胎记":

胎记 Playwright 原版表现 检测方法
UA 字符串 HeadlessChrome/146.0.0.0 字符串包含 “Headless”
navigator.webdriver true 一行 JS 检测
navigator.plugins 长度 0 真 Chrome 是 5
window.chrome undefined 真 Chrome 是 object
CDP 协议 留下 Runtime.evaluate 痕迹 时序检测

reCAPTCHA v3 给原版 Playwright 的得分是 0.1——也就是"这一看就是机器人"。

要绕过这些胎记,社区出现了 4 代方案,每代动手的"层级"越来越深:

代次 代表 补丁层级 怎么改
第 1 代 playwright-stealth JS 注入 启动后注入 JS 覆盖 navigator.webdriver 等属性
第 2 代 undetected-chromedriver Config 补丁 改 Chrome 启动参数 + binary 头几个字节
第 3 代 Camoufox C++ 源码(Firefox) 改 Firefox 源码,重新编译
第 4 代 CloakBrowser C++ 源码(Chromium) 改 Chromium 源码,重新编译

关键洞察:检测方在监测哪个层面,绕过方就要在哪个层面动手。 JS 注入对付 JS 检测有效,但对 TLS 指纹检测无效——TLS 握手发生在 JS 之前。源码级补丁是把"伪装"做到了二进制深处,运行时无法被覆写。

CloakBrowser 是 Chromium 系第一个把全部补丁打到 C++ 源码层的开源项目。这是它的核心位置。


三、它真的改了什么:57 个 C++ 补丁

我把 README 里能找到的指纹维度全数清楚,整理成下表:

类别 修补对象 检测意义
图形渲染 Canvas 像素哈希、WebGL UNMASKED_VENDOR/RENDERER、GPU 渲染卡和驱动的指纹常被用作设备 ID
音频 Audio 指纹、AAC audio AudioContext 振荡器输出的微小数值差异
字体 字体枚举 系统字体集合是设备指纹核心维度
屏幕 screen 尺寸、taskbar 高度、window position 真实浏览器有任务栏,headless 没有
硬件 hardwareConcurrency、deviceMemory navigator 暴露的 CPU 核心数和内存
网络 WebRTC ICE candidate IP、DNS/connect/SSL timing WebRTC 会泄漏真实内网 IP
自动化信号 navigator.webdriver、CDP input behavior 自动化工具最易暴露的信号
其他 WebAuthn、navigator.platform、UA、Client Hints、客户端矩形(client rects)、storage quota 杂项指纹,组合起来唯一性极高

8 大类,对应 57 个 C++ 补丁(Linux/Windows 平台)。macOS 因为 Chromium 145 还没全套 rebase,只有 26 个补丁。

编译进二进制 vs JS 注入:差在哪

举一个最容易理解的例子。navigator.webdriver = true 这件事。

JS 注入派(playwright-stealth):

// 启动后注入这段 JS
Object.defineProperty(navigator, 'webdriver', { get: () => false });

检测方反制:

// 检测 getter 是否被改写
const desc = Object.getOwnPropertyDescriptor(Navigator.prototype, 'webdriver');
if (desc.get.toString().includes('=> false')) return 'BOT';

这种攻防来回 5 年了,stealth 派一直在打补丁但永远落后半步。

源码补丁派(CloakBrowser):
直接改 Chromium 的 third_party/blink/renderer/core/frame/navigator_automation_information.cc,让 webdriver() 函数本身返回 false没有任何 JS 痕迹。检测方拿到的就是和真实 Chrome 完全一样的 getter。

差距是结构性的。这就是为什么 reCAPTCHA v3 给 CloakBrowser 的得分能打到 0.9(人类水平)而 stealth 派只能打到 0.5。

一行迁移示例

CloakBrowser 是个"薄包装层"——Python 或 JS 包,启动时调用自己编译的 Chromium 二进制:

# 之前(Playwright 原版)
- from playwright.sync_api import sync_playwright
- pw = sync_playwright().start()
- browser = pw.chromium.launch()

# 之后(CloakBrowser)
+ from cloakbrowser import launch
+ browser = launch()

返回的就是标准 Playwright Browser 对象。new_page()new_context()close() 这些 API 全通用。

JS 端同样一行:

const { launch } = require('cloakbrowser');
const browser = await launch();  // 就这样

四、“30/30 通过”——这个数字有多硬

这一节是这篇文章最不一样的地方。我做了一件简单但很多人懒得做的事:把 README 里所有具名披露的检测项数清楚

结果让我有点意外。

README 文字写着 “tested against 30+ detection sites”,但表格里只列出了约 14 项具名检测

# 检测服务 Playwright 原版 CloakBrowser
1 reCAPTCHA v3 0.1(机器人) 0.9(人类)
2 Cloudflare Turnstile(非交互式) FAIL PASS
3 Cloudflare Turnstile(managed) FAIL PASS
4 ShieldSquare BLOCKED PASS
5 FingerprintJS bot detection DETECTED PASS
6 BrowserScan bot detection DETECTED NORMAL(4/4)
7 bot.incolumitas.com 13 fails 1 fail
8 deviceandbrowserinfo.com 6 true flags 0 true flags
9 navigator.webdriver true false
10 navigator.plugins.length 0 5
11 window.chrome undefined object
12 UA string HeadlessChrome Chrome/146.0.0.0
13 CDP detection Detected Not detected
14 TLS 指纹(ja3n/ja4/akamai) Mismatch Identical to Chrome

剩下的 16+ 项 README 没具名披露。

这是营销话术还是测试覆盖?两种解读都成立:

善意解读:剩余 16 项是工具内部回归测试集(每个补丁对应 1 个或多个测试)。开发者社区里有 49 个 issues + 12 个 PR 在持续提交检测站点报告,56 个补丁 + 内部回归 = 30+ 总数合理。

警惕解读:30 是营销好看的整数。14 项具名是真凭据。任何严肃的反爬决策都该看 14,不该看 30。

我的判断:已披露的 14 项已经覆盖反爬战场 90% 真实场景——reCAPTCHA、Cloudflare、FingerprintJS 是三大金主,能搞定它们就解决了大部分 SaaS 网站。但商业决策不该被"30/30"这个营销数字牵着走。

要诚实,README 要么具名列出 30 项,要么把数字换成"我们打了 57 个补丁,覆盖 8 大类指纹"。后者更硬。


五、和 4 个同类方案比,CloakBrowser 强在哪

我把 README 给的对比表又补了几个运维维度——光看技术能力不够,工具最终是要进生产环境的:

维度 Playwright playwright-stealth undetected-chromedriver Camoufox CloakBrowser
补丁层级 JS 注入 Config 补丁 C++(Firefox) C++(Chromium)
引擎 Chromium Chromium Chrome Firefox Chromium
reCAPTCHA v3 0.1 0.3-0.5 0.3-0.7 0.7-0.9 0.9
维护活跃度 极高 一般 高(16 release)
二进制大小 标准 标准 标准 ~150MB ~200MB
平台覆盖 Linux/Win 146 + macOS 145
License 风险 MIT 干净 MIT 干净 干净 复杂 MIT 代码 + 二进制禁分发
API 兼容 原生 原生(patch) Selenium 自有 Playwright/Puppeteer 双兼容
AI Agent 友好度 一般 一般 一般 良好 优秀(browser-use/Crawl4AI 内置集成)

关键判断

如果你的目标网站用了 Cloudflare 或 reCAPTCHA v3,CloakBrowser 是当前 Chromium 系最强方案。 没有之一。

但下面三种情况它不是最优:

  1. 你只需要绕过 navigator.webdriver 这种入门级检测 → 原版 Playwright + stealth 已够,省 200MB 二进制
  2. 你的目标网站只检测 UA → 改一个启动参数就行,不用上重武器
  3. 你的合规要求严格(金融/医疗) → 二进制 License 禁分发是灰区,需要法务确认

六、装上之后会踩到的 5 个坑

我把 README 里的"小字部分"和 issue 列表里高频抱怨拎出来,整理成 5 个坑。

坑 1:二进制 200MB,CI/CD 镜像构建变慢

每次 pip install cloakbrowser 之后首次 launch 会下载平台对应二进制,约 200MB。如果你在 GitHub Actions / GitLab CI 里跑,每次构建都要等这个下载。

解法:用官方 Docker 镜像 cloakhq/cloakbrowser —— 二进制已经预装。或者在 CI 里 cache ~/.cloakbrowser/bin/ 目录。

坑 2:macOS 比 Linux/Windows 落后一个 Chromium 版本

平台 Chromium 版本 补丁数
Linux x86_64 146 57
Linux arm64 146 57
Windows x86_64 146 57
macOS arm64 145 26
macOS x86_64 145 26

意义:macOS 上你少了 31 个补丁。如果你只在 Mac 上开发并 ship 到 Linux 服务器,没问题;但如果生产环境也在 macOS(比如某些企业 Mac mini 跑着抓取任务),你需要意识到这个差距。

坑 3:humanize=True 会让速度慢 2-3 倍

CloakBrowser 提供了 humanize=True 参数——开启后鼠标移动用贝塞尔曲线、键盘按键加随机时序、滚动模拟惯性。听起来很美。

browser = launch(humanize=True)

实测速度比原版慢 2-3 倍。按需开:只在被风控盯上的关键页面(登录、提交表单)开,列表抓取页关闭。

坑 4:BINARY-LICENSE 禁止再分发——这是合规雷区

代码部分是 MIT,但二进制(编译后的 Chromium)禁止再分发

什么算"再分发"?READme 没说清。我整理几个可能踩雷的场景:

场景 风险
你打 Docker 镜像往公司内网仓库 灰区——内网算不算分发?
你做成 SaaS 让客户调用 高风险,建议邮件 cloakhq@pm.me 确认
你做成 npm 私有包给团队用 灰区
你 fork 仓库重新编译并 GitHub release 高风险,明确禁止

不确定就发邮件问。10.4k star 项目作者一般会回。

坑 5:它是单一职责工具,别拿它当全能

CloakBrowser 明确不内置两件事:

  • 代理轮换:你得自己接 proxy provider(Bright Data / Smartproxy / 自建)
  • CAPTCHA 解决:被人机验证拦下后它不帮你过——它的目标是"不出现 CAPTCHA",而不是"出现了帮你解"

这其实是好事——单一职责工具更稳定。但如果你期待装一个东西就能开箱抓淘宝京东拼多多,醒醒。


七、3 类场景该装 vs 3 类场景不该装

✅ 装它的 3 类场景

  1. 目标网站用 Cloudflare / reCAPTCHA v3:电商、社交、金融数据网站基本都是。CloakBrowser 是当前 Chromium 系最优解。
  2. 长期监测任务:每天跑、跑几个月、不能被风控封号封 IP。源码级伪装稳定性远高于 JS 注入派。
  3. AI Agent 浏览:browser-use、Crawl4AI、Stagehand 这类项目把 CloakBrowser 列为推荐底座。AI agent 的浏览行为本身就比脚本更像人,配上 CloakBrowser 几乎无法识别。

❌ 不装它的 3 类场景

  1. 纯 API 抓取:杀鸡用牛刀。直接 requests + 代理已够。
  2. 一次性脚本:你写个 100 行脚本下载一批数据,跑完就扔。下载 200MB 二进制不值。
  3. 合规要求高的场景:金融、医疗、政企。BINARY-LICENSE 灰区你过不了法务审。

八、结尾:领先半步就是这种工具的全部承诺

读完这一切,我对反检测浏览器市场有了一个新的判断。

CloakBrowser 不是"反爬终结者"。它做不到那个事——只要检测方愿意升级,永动机就会继续转。它做的是让你领先检测方半步

半步的价值有多大?看具体场景。

如果你跑的是周末 hack 项目,半步没意义。如果你跑的是公司每月支撑十万级请求的数据管线、每次被封都意味着重写抓取逻辑 + 调代理池 + 重新驯化模型——半步就是一个工程师两周的工资。

10.4k stars 不算行业巨星,但 16 个 release 里能看到 CloakHQ 团队每两周一更的节奏,每次都跟上 Chromium 主线。这种活跃度比 star 数更值钱。

我的结论:CloakBrowser 不是 silver bullet,是工具箱里多一把锤子。当你的目标真的是 Cloudflare 把守的城堡时,这把锤子是当前最好用的那把。


九、给想动手的你

# Python
pip install cloakbrowser

# Node.js(搭 Playwright)
npm install cloakbrowser playwright-core

# Docker(一行验证)
docker run --rm cloakhq/cloakbrowser cloaktest

# 最小可用迁移
python -c "
from cloakbrowser import launch
b = launch()
p = b.new_page()
p.goto('https://demo.fingerprint.com')
print(p.content()[:500])
b.close()
"

仓库:https://github.com/CloakHQ/CloakBrowser(10.4k stars / v0.3.28 / MIT 代码 + 二进制专用 license)

官网:https://cloakbrowser.dev/


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐