CloakBrowser:从 C++ 源码层打补丁,让自动化浏览器通过所有主流反爬检测

最近发现一个开源项目,叫 CloakBrowser。

项目地址:https://github.com/CloakHQ/CloakBrowser | 官网:https://cloakbrowser.dev

做过爬虫或自动化的人应该都遇到过这个问题:Cloudflare 拦截、reCAPTCHA 打低分、FingerprintJS 识别出机器人。

市面上的解决方案大多是 JS 注入或者改配置参数,用一段时间就失效了。

CloakBrowser 的思路完全不同。

[!info] 项目速览

项目 CloakBrowser
原理 直接修改 Chromium C++ 源码,编译进二进制
最新版本 v0.5.10(基于 Chromium 151,87 处源码级补丁)
兼容性 与 Playwright / Puppeteer API 完全兼容
测试成绩 reCAPTCHA v3 0.9 分、Cloudflare Turnstile 通过
开源协议 Wrapper 为 MIT;二进制有独立许可(免费使用,禁止再分发)

目录

1. 它到底做了什么

直接改 Chromium 的 C++ 源码,重新编译成二进制。

不是在浏览器启动后注入 JS 去伪造 navigator.webdriver,也不是靠 --disable-blink-features=AutomationControlled 这种 flag,而是在编译阶段就把指纹信息改掉,包括 canvas、WebGL、音频、字体、GPU、屏幕尺寸、WebRTC、网络时序、CDP 输入行为等。截至 v0.5.10,共内置 87 处源码级补丁(免费旧版 Chromium 146 为 58 处)。

检测系统看到的是一个"真实的浏览器",因为它本来就是一个真实的浏览器。

官方实测结果(最新 Pro 构建,已对 30+ 检测站点验证):

检测项 原版 Playwright CloakBrowser
reCAPTCHA v3 分数 0.1(机器人) 0.9(人类)
Cloudflare Turnstile 失败 通过
FingerprintJS 被识别 通过
BrowserScan 被识别 4/4 正常
navigator.webdriver true false
navigator.plugins.length 0 5(真实插件列表)
UA 字符串 HeadlessChrome Chrome/151.0.0.0(无无头泄漏)
CDP 检测 被识别 未识别(isAutomatedWithCDP: false)
TLS 指纹 不匹配 与真实 Chrome 一致(ja3n/ja4/akamai)

2. 为什么其他方案会失效

playwright-stealth、undetected-chromedriver、puppeteer-extra 这类工具的共同问题是:补丁打在表面,检测系统盯的也是表面。

Chrome 每次更新,JS 注入的方式可能就失效了。更麻烦的是,反爬系统已经开始检测"补丁本身",比如某些特定的 JS 覆盖模式、flag 组合,反而成了机器人的特征。

CloakBrowser 的源码级补丁不存在这个问题,因为没有任何运行时注入的痕迹——指纹在编译阶段就写进了二进制。

3. 用起来有多简单

这是它最大的优点之一:API 和 Playwright 完全兼容,改一行 import 就够了:

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

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

剩下的代码一行不用改。

JavaScript 同样支持(Playwright 与 Puppeteer 双兼容):

import { launch } from 'cloakbrowser'; // Playwright

const browser = await launch();
const page = await browser.newPage();
await page.goto('https://protected-site.com');
await browser.close();
import { launch } from 'cloakbrowser/puppeteer'; // Puppeteer

const browser = await launch();
const page = await browser.newPage();
await page.goto('https://protected-site.com');
await browser.close();

安装也很直接:

pip install cloakbrowser
# 或
npm install cloakbrowser playwright-core

.NET / C# 也有官方客户端(NuGet 包 CloakBrowser),API 同样对齐 Playwright。

第一次运行会自动下载约 200MB 的定制 Chromium 二进制(下载后校验 Ed25519 签名),之后缓存在本地,不需要额外配置。

4. 几个值得关注的功能

4.1. 指纹管理

每次启动会自动生成随机指纹种子,GPU 型号、屏幕尺寸、硬件参数全部自动伪造,每次启动都是一个新身份。

如果需要模拟"回访用户"(对 reCAPTCHA Enterprise 很重要),可以固定种子:

browser = launch(args=["--fingerprint=12345"])

同一个种子每次产生完全一致的指纹,在同一个站点反复访问时不会显得可疑。默认情况下,Linux 上运行还会伪装成 Windows 平台(更常见的指纹,更难被聚类识别),也支持 --fingerprint-platform=macos 切换成 macOS 身份。

4.2. 人类行为模拟

加一个参数,鼠标移动、键盘输入、滚动行为全部变成人类模式:

browser = launch(humanize=True)

鼠标走贝塞尔曲线、键盘有每个字符的时间间隔、偶尔打错字再自我纠正、滚动有加速和减速过程。底层自动替换,无需修改业务代码。还支持 human_preset="careful" 预设和 human_config 自定义参数(如错字率、打字间隔)。

4.3. 代理 + 时区自动匹配

这个细节很多人忽略。用了代理但时区还是 UTC、语言还是 en-US,这本身就是机器人信号。

browser = launch(proxy="http://user:pass@proxy:8080", geoip=True)

geoip=True 会通过代理出口 IP 自动检测时区和语言,同时自动注入 --fingerprint-webrtc-ip 防止 WebRTC IP 泄漏,一个参数解决三个问题。HTTP 和 SOCKS5 代理都原生支持。

4.4. 持久化 Profile

from cloakbrowser import launch_persistent_context

ctx = launch_persistent_context("./my-profile", headless=False)

Cookie、localStorage、缓存跨会话保留,避免被识别为无痕模式,也能积累浏览历史让 Profile 看起来更真实。launch() 默认是无痕上下文,部分站点会对无痕模式扣分,需要时就换成 launch_persistent_context()。

5. 对抗最顽固的站点

遇到 DataDome、Kasada、Akamai 这类强度更高的反爬系统,推荐的完整配置是:

browser = launch(
    proxy="http://your-residential-proxy:port",  # 住宅 IP,数据中心 IP 直接被 IP 信誉封掉
    geoip=True,        # 时区和语言匹配代理出口
    headless=False,    # 有头模式,部分站点能检测无头
    humanize=True,     # 人类行为
)

如果代理支持 SOCKS5,也可以换 proxy="socks5://user:pass@host:port",兼容性更好。

Linux 服务器上还需要额外安装字体包——Kasada 和 Akamai 会在隐藏 canvas 上渲染 emoji 然后对比哈希值,最小化的 Linux 环境(Docker、云 VM)缺字体就会暴露。官方 Docker 镜像里已经预装了字体,如果是裸机部署则需要手动安装。

6. 一些使用细节

6.1. reCAPTCHA 分数低的常见原因

page.wait_for_timeout() 会发送 CDP 命令,reCAPTCHA 能检测到,建议换成原生 sleep:

# 有问题的写法:发送 CDP 命令,reCAPTCHA 能检测到
page.wait_for_timeout(3000)

# 正确写法:对浏览器不可见
import time
time.sleep(3)

其他提高分数的要点:

  • 表单填写用 page.type() 而不是 page.fill()——type() 模拟真实键盘事件,fill() 直接设值,行为分析会发现差异
  • 优先用 Playwright 而不是 Puppeteer——Puppeteer 发送的 CDP 流量更多,reCAPTCHA Enterprise 检测更敏感
  • 触发验证前在页面停留 15 秒以上;两次 grecaptcha.execute() 之间间隔 30 秒以上
  • 固定指纹种子,保持设备身份一致

6.2. 和 AI Agent 框架集成

browser-use、Crawl4AI、Scrapling、Stagehand、LangChain、Selenium 等框架都有官方示例,两种接入方式:

  1. 框架直接用 CloakBrowser 的二进制:调用 ensure_binary() 下载二进制,把 stealth 参数传给框架(适合 Selenium、Stagehand 等)
  2. CloakBrowser 先启动,框架再通过 CDP 连接:启动时开 --remote-debugging-port,框架连到 CDP 端口(适合 browser-use、Crawl4AI 等)

7. 和同类工具的对比

检测维度 playwright-stealth Camoufox CloakBrowser
补丁层级 JS 注入 C++(Firefox) C++(Chromium)
reCAPTCHA 分数 0.3 - 0.5 0.7 - 0.9 0.9
API 兼容性 原生 Python 专属(Playwright 封装) 原生
维护状态 基本停滞 恢复活跃开发,官方定位为不稳定 beta 活跃

Camoufox 是最接近的竞品,它基于 Firefox,通过 Python 封装 Playwright 使用;2025 年曾因维护者个人原因停更近一年,2026 年初恢复开发,官方明确尚未达到稳定生产状态。CloakBrowser 基于 Chromium,TLS 指纹与真实 Chrome 一致,且能直接复用 Playwright 生态,这是它的主要优势。

8. 项目状态与许可

  • GitHub 星数:约 2.9 万(2026 年 9 月,来自官网实时数据;项目 2026 年 4 月发布后快速走红)
  • 最新版本:v0.5.10,基于 Chromium 151(此前文章里写的 Chromium 146 已转为免费旧版,保留在 GitHub Releases)
  • 协议:
    • Wrapper 代码(Python / JS / .NET)为 MIT
    • 二进制有独立许可条款:免费使用,但禁止再分发、转售或二次封装
    • 免费策略:Chromium 146 旧版完全免费无需 key;最新构建(Chromium 151)通过 GitHub 登录获取免费 key 可用 1 个并发会话,更多并发需购买 Pro 订阅(v148 及以上仅限 Pro 下载)

[!warning] 合规提醒
项目官方明确声明:仅限用于你自己的账号、你自己的数据和公开站点的合法自动化;未经授权自动化系统、撞库、批量注册等行为被明确禁止。反爬检测本质是持续的军备竞赛,源码级补丁更难被检测,但官方也承认无法保证永远不被识破。

9. 数据核实说明

本文数据基于 2026-09-17 抓取的官方信息核实更新:

对做数据采集、自动化测试、AI Agent 的人来说,值得关注。