
做过爬虫或自动化测试的同学,大概都有过这些经历:
- 刚写好的Playwright脚本,一跑就被Cloudflare拦下
- 明明换了IP,reCAPTCHA还是给0.1分的"机器人"判定
- 用
playwright-stealth之类的工具,Chrome一更新就集体阵亡
为什么传统方案总是撑不过三天?
因为它们都在"表面层"做文章——注入JavaScript、修改配置文件、加启动参数...
而现代反爬虫系统已经深入到了C++源码级别的检测。
今天要聊的 CloakBrowser,选择了一条更彻底的路:直接修改Chromium源码,重新编译。
效果?reCAPTCHA v3打0.9分,Cloudflare Turnstile 30/30全通过。
GitHub 地址:
一句话说清楚
CloakBrowser 是一个基于Chromium开发的反检测浏览器,通过57个C++源码级补丁修改浏览器指纹,能绕过所有主流的反爬虫检测系统。
它不是配置补丁,不是JS注入,而是一个真正的Chromium二进制文件——只不过指纹在源码层就被改掉了。

为什么传统方案总是失败?
JS注入的致命缺陷
playwright-stealth、undetected-chromedriver这类工具的套路基本一致:在浏览器启动后,通过执行一段JavaScript来覆盖navigator.webdriver、navigator.plugins等属性。
问题在于:反爬系统也在检测这些JS补丁本身。
// 检测webdriver属性覆盖
const isPatched =
Object.getOwnPropertyDescriptor(navigator, 'webdriver') !== undefined ||
window.navigator.webdriver === true;
// 检测automation相关特征
const isAutomation =
/headless/i.test(navigator.userAgent) ||
navigator.plugins.length === 0;
这些检测脚本越来越精准,专门针对playwright-stealth的特征码做指纹匹配。官方一升级补丁,反爬系统第二天就能识别新特征。
配置级flag的局限
即使你用--disable-blink-features=AutomationControlled之类的Chrome flag,仍然有以下问题:
| 检测维度 | flag能否解决 |
|---|---|
| Canvas指纹 | ❌ 无法覆盖 |
| WebGL渲染器信息 | ❌ 无法覆盖 |
| AudioContext音频指纹 | ❌ 无法覆盖 |
| 字体列表差异 | ❌ 无法覆盖 |
| TLS指纹不匹配 | ❌ 无法覆盖 |
| WebRTC IP泄漏 | ❌ 无法覆盖 |
配置级flag只能改Chrome的启动参数,对浏览器运行时产生的「指纹信号」完全无能为力。
版本更新的维护噩梦
Chromium基本每个月发布一个大版本,每个版本源码都可能变化。JS注入方案需要持续维护,一旦Chromium更新,原有的属性路径或函数签名变了,补丁直接失效。

CloakBrowser 的解决方案:源码级修改
CloakBrowser 的做法是把补丁直接打在Chromium源码上,每次Chromium大版本更新时,重新rebase所有patch。
核心思路:不是修改配置,而是修改源码,重新编译。
57个C++源码级补丁
CloakBrowser 目前包含57个源码级补丁,覆盖以下指纹维度:
| 补丁类别 | 覆盖内容 | 解决的问题 |
|---|---|---|
| Canvas指纹 | 2D/3D渲染、GPU着色器 | 不同显卡渲染结果差异 |
| WebGL指纹 | 渲染器信息、驱动版本 | 虚拟化环境GPU信息缺失 |
| 音频指纹 | AudioContext、音频处理 | 自动化环境返回固定值 |
| 字体枚举 | 系统字体列表 | 字体列表不完整或缺失 |
| 屏幕指纹 | 分辨率、色深、DPI | Headless模式分辨率异常 |
| WebRTC IP | ICE候选者、本地IP | 代理环境下IP泄漏 |
| 自动化信号 | CDP行为、输入时序 | 自动化操作与真人差异 |
| TLS指纹 | 握手参数、密码套件 | TLS指纹与真实浏览器不匹配 |
| 时区/语言 | 自动匹配代理IP地理位置 | 时区与IP位置不一致 |
这些补丁在C++编译阶段就生效,反爬系统检测不到任何"修改痕迹"——因为它看到的就是一个正常的Chromium。
humanize=True:拟人化行为
除了静态指纹,CloakBrowser还能模拟人类行为:
from cloakbrowser import launch
# 一行参数,鼠标轨迹、键盘时序、滚动行为完全拟人化
browser = launch(humanize=True)
开启humanize=True后:
- 鼠标轨迹:贝塞尔曲线,有加速减速,不是直线
- 键盘时序:按键间隔随机,符合人类打字习惯
- 滚动行为:滚动速度变化,有停顿和回滚
实测数据:30/30检测全通过
CloakBrowser 官方在30多个检测网站上进行了测试:
| 检测项 | CloakBrowser | 传统Chrome |
|---|---|---|
| Cloudflare Turnstile | ✅ 通过 | ❌ 拦截 |
| reCAPTCHA v3 | 0.9分 | 0.1分 |
| DataDome | ✅ 通过 | ❌ 拦截 |
| PerimeterX | ✅ 通过 | ❌ 拦截 |
| FingerprintJS | ✅ 通过 | ❌ 识别 |
| BrowserScan | ✅ 通过 | ❌ 识别 |
结论:CloakBrowser在所有30项检测中全部通过,而传统方案普遍在5-10项上存在被识别风险。

核心功能一览
1. Drop-in替换Playwright/Puppeteer
CloakBrowser 的API与Playwright/Puppeteer完全一致,只需要改import:
Python(Playwright):
# 原来
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
browser = pw.chromium.launch()
# 现在
from cloakbrowser import launch
browser = launch()
JavaScript(Playwright):
// 原来
import { chromium } from 'playwright';
const browser = await chromium.launch();
// 现在
import { launch } from 'cloakbrowser';
const browser = await launch();
JavaScript(Puppeteer):
import { launch } from 'cloakbrowser/puppeteer';
const browser = await launch();
2. 指纹管理
from cloakbrowser import launch
# 自定义指纹
browser = launch(
fingerprint={
"timezone": "America/New_York",
"locale": "en-US",
"platform": "Win32",
"screen": {"width": 1920, "height": 1080}
}
)
3. 代理支持
# HTTP代理
browser = launch(proxy="http://user:pass@host:port")
# SOCKS5代理(原生支持)
browser = launch(proxy="socks5://user:pass@host:port")
# 自动从代理IP检测时区
browser = launch(
proxy="http://proxy:8080",
fingerprint_timezone="auto"
)
4. 持久化上下文
# 创建持久化上下文,cookies和localStorage会保存到指定目录
browser = launch_persistent_context(
user_data_dir="./profile_1",
fingerprint={"timezone": "Asia/Shanghai"}
)
5. Browser Profile Manager
CloakBrowser 还提供了一个自托管的浏览器配置管理器,作为Multilogin、GoLogin的开源替代品:
docker run -p 8080:8080 -v cloakprofiles:/data cloakhq/cloakbrowser-manager
打开 http://localhost:8080,创建配置、设置代理、启动浏览器——全部在浏览器里完成。
安装与使用
系统要求
- Python:3.8+
- Node.js:16+
- 平台:Windows、macOS、Linux
- 磁盘空间:~200MB(首次运行自动下载Chromium二进制文件)
安装方式
Python:
pip install cloakbrowser
JavaScript / Node.js:
# Playwright方案
npm install cloakbrowser playwright-core
# Puppeteer方案
npm install cloakbrowser puppeteer-core
Docker(无需安装,直接体验):
docker run --rm cloakhq/cloakbrowser cloaktest
快速上手
Python基础用法:
from cloakbrowser import launch
browser = launch()
page = browser.new_page()
page.goto("https://protected-site.com")
browser.close()
带代理和humanize:
from cloakbrowser import launch
browser = launch(
proxy="http://user:pass@proxy:8080",
humanize=True,
fingerprint_timezone="auto"
)
page = browser.new_page()
page.goto("https://protected-site.com")
browser.close()
JavaScript(Playwright):
import { launch } from 'cloakbrowser';
const browser = await launch({
proxy: 'http://user:pass@proxy:8080',
humanize: true
});
const page = await browser.newPage();
await page.goto('https://protected-site.com');
await browser.close();
适用场景
1. 网页爬虫开发
需要抓取有反爬机制的网站时,CloakBrowser能大幅降低被封概率。
2. 自动化测试
测试有Cloudflare或reCAPTCHA保护的网站时,不再需要手动处理验证码。
3. 跨境电商多账号管理
同时运营多个Amazon、eBay账号,每个账号需要独立的浏览器环境和指纹。
4. 数据采集与监控
监控竞品价格、库存信息,需要稳定访问目标网站而不被拦截。
5. 广告验证与竞品分析
验证广告投放效果,分析竞品广告策略,需要模拟真实用户访问。
同类工具对比
| 工具 | 技术方案 | 检测通过率 | 维护成本 | 开源 |
|---|---|---|---|---|
| CloakBrowser | C++源码级补丁 | 30/30 | 低(自动更新) | ✅ MIT |
| playwright-stealth | JS注入 | 15/30 | 高(需手动更新) | ✅ MIT |
| undetected-chromedriver | 配置补丁 | 12/30 | 高(需手动更新) | ✅ GPL |
| Multilogin | 商业方案 | 28/30 | 低(付费服务) | ❌ 商业 |
| GoLogin | 商业方案 | 27/30 | 低(付费服务) | ❌ 商业 |
| 维度 | CloakBrowser优势 | CloakBrowser局限 |
|---|---|---|
| 检测通过率 | 源码级修改,反爬系统无法识别 | - |
| 维护成本 | 自动更新Chromium版本 | - |
| 开源协议 | MIT协议,完全免费无限制 | - |
| API兼容性 | 直接替换Playwright/Puppeteer | - |
| 首次启动 | - | 需要下载~200MB二进制文件 |
| 扩展支持 | - | 不支持所有Chromium扩展 |
| 极端场景 | - | 某些检测场景仍需配合代理使用 |
GitHub 地址:
写在最后
CloakBrowser 代表了一种更彻底的反检测思路:
不是跟反爬系统玩"猫鼠游戏",而是直接从源码层面解决问题。
这种方案的优势很明显:检测通过率高达30/30,维护成本低因为支持自动更新,使用体验也很好只需3行代码就能上手。但也需要注意一些局限:技术门槛相对较高,因为需要维护Chromium源码补丁;项目还在快速发展中,目前还是v0.3.x版本,API可能会发生变化;某些极端检测场景下仍需配合代理使用。
总的来说,如果你需要稳定、高效、开源的反检测浏览器方案,CloakBrowser是目前最好的选择之一。
毕竟,与其在表面层修修补补,不如从根源上解决问题。
关注
如果你觉得这篇文章对你有帮助,欢迎关注我们的公众号,获取更多开源工具的深度解读和使用指南。