CloakBrowser 实测:源码级反指纹浏览器到底能过几道关

CloakBrowser 实测:源码级反指纹浏览器到底能过几道关

上周五跑爬虫采集数据,Playwright 脚本在 Cloudflare 面前吃了闭门羹。换了 playwright-stealth 插件,管了两天又失效。于是翻了一圈 GitHub Trending,发现了 CloakBrowser------一个直接改 Chromium C++ 源码来做反指纹的项目。20k star,一周涨了 6800+。

听起来很猛,但到底是真东西还是 star 泡沫?我花了一个周末把它跑了个遍。

传统方案为什么总被抓

先说清楚问题在哪。

浏览器自动化被检测,核心原因是 Playwright/Puppeteer 启动的 Chromium 带了太多"我是机器人"的标记。最典型的几个:

javascript 复制代码
// 普通 Playwright 启动后
navigator.webdriver        // true  → 红牌
navigator.plugins.length   // 0     → 正常浏览器有 5 个
window.chrome              // undefined → 真 Chrome 一定有

现有的反检测方案分两派:

JS 注入派 (playwright-stealth、puppeteer-extra-plugin-stealth):通过 JavaScript 覆盖浏览器 API 返回值。问题是------检测方也会用 JS 来验证这些覆盖是否一致。你改了 navigator.webdriver,人家查 Object.getOwnPropertyDescriptor,发现是后注入的,照样标红。

配置修改派(undetected-chromedriver):改 Chrome 启动参数和二进制签名。问题是------每次 Chrome 大版本更新都可能失效,而且这类工具最近两年几乎停更了。

两派的共同弱点:改的都是表层,底下的 C++ 层暴露的信息没动。

CloakBrowser 怎么做的

CloakBrowser 选了一条更重的路:直接 fork Chromium 源码,在 C++ 层修改了 58 个位置。

这意味着 navigator.webdriver 不是被 JS 覆盖成 false,而是 Chromium 编译出来就是 false。检测脚本用什么手段查都查不出异常,因为它确实就是个"正常"的 Chrome。

改了哪些东西?我翻了它的 CHANGELOG,大致分这几类:

类别 具体修改 影响
画布渲染 Canvas 2D / WebGL 指纹随机化 绕过 FingerprintJS
音频 AudioContext 采样值微调 绕过音频指纹
GPU/显卡 GPU 厂商和渲染器信息匹配真机 绕过 WebGL 指纹
网络层 TLS 指纹(ja3/ja4)对齐真 Chrome 绕过服务端 TLS 检测
屏幕 分辨率和色深匹配常见设备 绕过设备指纹
自动化信号 webdriver/CDP 标记全部清除 绕过基础检测
WebRTC ICE candidate IP 伪装 防 IP 泄露

编译好的二进制通过 pip/npm 安装时自动下载,大约 200MB。首次启动会缓存在本地。

装起来跑一下

安装很简单:

bash 复制代码
pip install cloakbrowser

或者 Node.js:

bash 复制代码
npm install cloakbrowser playwright-core

写个最基础的脚本:

python 复制代码
from cloakbrowser import launch

browser = launch(headless=False)
page = browser.new_page()

# 先看看基础指标
result = page.evaluate("""() => ({
    webdriver: navigator.webdriver,
    plugins: navigator.plugins.length,
    chrome: typeof window.chrome,
    languages: navigator.languages
})""")
print(result)
# {'webdriver': False, 'plugins': 5, 'chrome': 'object', 'languages': ['en-US', 'en']}

page.goto("https://bot.incolumitas.com/")
page.wait_for_timeout(5000)
page.screenshot(path="bot_test.png")
browser.close()

对比一下普通 Playwright:

python 复制代码
from playwright.sync_api import sync_playwright

pw = sync_playwright().start()
browser = pw.chromium.launch(headless=False)
page = browser.new_page()

result = page.evaluate("""() => ({
    webdriver: navigator.webdriver,
    plugins: navigator.plugins.length,
    chrome: typeof window.chrome
})""")
print(result)
# {'webdriver': True, 'plugins': 0, 'chrome': 'undefined'}

browser.close()
pw.stop()

差别很明显。

实际检测站点跑分

光看 navigator 属性不够,得拿真实的检测站点试。我跑了 5 个:

1. reCAPTCHA v3 评分

reCAPTCHA v3 不弹验证码,而是在后台给你打分,0-1 分,0.9 以上算人类。

python 复制代码
from cloakbrowser import launch

browser = launch(humanize=True)  # 开启人类行为模拟
page = browser.new_page()
page.goto("https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php")
page.click("button#recaptcha-action-one")
page.wait_for_timeout(3000)

score = page.text_content(".score")
print(f"reCAPTCHA v3 score: {score}")
# 实测: 0.9
browser.close()

普通 Playwright 跑同一个页面,得分 0.1。

2. Cloudflare Turnstile

这是现在用得最多的验证方案。CloakBrowser 的 humanize 模式可以自动通过非交互式挑战,managed 挑战需要模拟一次点击。

python 复制代码
browser = launch(humanize=True, headless=False)
page = browser.new_page()
page.goto("https://challenges.cloudflare.com/turnstile/demo")
page.wait_for_timeout(8000)
# 非交互式: 自动通过
# managed: 需要点击复选框

Playwright 直接被拦,显示"请验证您是人类"的死循环。

3. BrowserScan

browserscan.net 做 4 项检测:Bot Detection、Browser Fingerprint、WebRTC Leak、IP Address。CloakBrowser 拿到 4/4 NORMAL。

4. FingerprintJS

demo.fingerprint.com 的反爬虫检测也过了。普通 Playwright 秒标记为 bot。

5. bot.incolumitas.com

这是检测最严格的一个站点,测 24 项指标。普通 Playwright 失败 13 项,CloakBrowser 只失败 1 项(WebDriver spec 标准接口,这个改不掉也没啥影响)。

humanize 模式值得单独说

CloakBrowser 有个 humanize=True 参数,开了以后鼠标移动走贝塞尔曲线,键盘输入有随机延迟,滚动行为模拟真人习惯。

python 复制代码
browser = launch(humanize=True, human_preset="careful")
page = browser.new_page()
page.goto("https://example.com/login")

# 输入会自动带随机延迟,每个字符间隔不同
page.fill("#username", "test@example.com")
page.fill("#password", "mypassword")

# 点击走贝塞尔曲线,不是瞬移
page.click("#submit")

还可以对单次操作单独配置:

python 复制代码
# 只在这次点击用 humanize
page.click("#button", human_config={"speed": "slow"})

deviceandbrowserinfo.com 的行为检测,开了 humanize 后 24/24 全过,判定 "You are human!"。

代理和指纹联动

爬虫场景经常用代理 IP。CloakBrowser 有个 geoip 功能,根据代理出口 IP 自动设置时区和语言:

python 复制代码
browser = launch(
    proxy="socks5://user:pass@proxy:1080",
    geoip=True  # 自动根据出口IP设置timezone/locale
)

这解决了一个常见问题:你用了美国 IP,但浏览器时区显示 Asia/Shanghai,这种矛盾直接暴露代理。

还支持 WebRTC IP 伪装,防止通过 WebRTC 泄露真实 IP:

python 复制代码
browser = launch(
    proxy="http://proxy:8080",
    args=["--fingerprint-webrtc-ip=auto"]  # 自动匹配代理出口IP
)

持久化 Profile

有些网站检测"空白"浏览器配置------没有 Cookie、没有浏览历史、没有缓存。CloakBrowser 支持持久化 profile:

python 复制代码
from cloakbrowser import launch_persistent_context

# 第一次运行:创建 profile
ctx = launch_persistent_context("./my-profile", headless=False)
page = ctx.new_page()
page.goto("https://target-site.com")
# 登录操作...
ctx.close()  # profile 自动保存

# 第二次运行:Cookie 和 localStorage 还在
ctx = launch_persistent_context("./my-profile", headless=False)
page = ctx.new_page()
page.goto("https://target-site.com")
# 已经是登录状态

这比每次都走登录流程要安全得多,因为频繁登录本身也是异常行为。

踩过的坑

  1. 首次下载二进制慢。200MB 的 Chromium 二进制从 GitHub 下载,国内网络可能要挂代理。下完之后就缓存了,后续启动秒开。

  2. headless 模式和 headed 模式行为不完全一致。部分检测站点在 headless 下仍然能检测到差异(主要是渲染管线)。高防站建议用 headed 模式配合 Xvfb 跑。

  3. 和 playwright-stealth 不要混用。CloakBrowser 已经在 C++ 层做了反检测,再叠 JS 注入反而可能产生指纹矛盾,被检测到"这个浏览器做了双重伪装"。

  4. Docker 里跑需要 GPU 相关参数。不然 WebGL 指纹会暴露虚拟环境:

bash 复制代码
docker run --rm \
    --shm-size=2g \
    cloakhq/cloakbrowser cloaktest
  1. geoip=True 会通过代理发 HTTP 请求解析 IP。如果代理有流量计费或限速,注意这一点。可以手动指定:
python 复制代码
browser = launch(
    proxy="http://proxy:8080",
    timezone="America/New_York",
    locale="en-US"
)

和同类工具对比

特性 Playwright playwright-stealth undetected-chromedriver Camoufox CloakBrowser
reCAPTCHA v3 0.1 0.3-0.5 0.3-0.7 0.7-0.9 0.9
Cloudflare 失败 偶尔通过 偶尔通过 通过 通过
修改层级 JS 注入 配置修改 C++(Firefox) C++(Chromium)
Chrome 更新后是否失效 - 经常 经常 偶尔 偶尔
维护状态 活跃 停更 停更 不稳定 活跃
API 兼容 - Playwright Selenium 自有 Playwright

Camoufox 是另一个 C++ 级方案,但它改的是 Firefox,用自己的 API。CloakBrowser 改的是 Chromium,直接兼容 Playwright API,迁移成本低------改一行 import 就行。

几个注意事项

CloakBrowser 解决的是"不被识别为机器人",但它不解决以下问题:

  • 不会自动过验证码。Turnstile 非交互式可以自动过,但真正需要图像识别的验证码还是要接第三方服务。
  • 不包含代理池。需要自己准备代理。
  • 不保证永远不被检测。反检测和检测是对抗博弈,没有永久方案。

用在什么场景合适?数据采集、自动化测试、竞品监控、价格监测这些合法场景。拿去做灰产的别看这篇文章。

总结

CloakBrowser 从 Chromium 源码层面做反检测,不走 JS 注入和配置修改的老路。实测下来比 playwright-stealth 和 undetected-chromedriver 强不少,特别是 Cloudflare 和 reCAPTCHA v3 的通过率差距明显。

项目在 GitHub 开源(MIT 协议)。如果你现在被 Cloudflare 拦着,可以试一下。


作者:92year

相关推荐
Hommy8811 小时前
【剪映小助手】贴纸搜索接口
开源·github·aigc·剪映小助手·视频剪辑自动化
陆业聪12 小时前
微调:让通用大模型变成你的「专属定制ROM」——从AOSP到LoRA的迁移学习
人工智能·aigc
不大姐姐AI智能体12 小时前
GPT Image 2 进阶使用:为什么你的图总是脏、糊、有噪点?如何让 GPT Image 2 出的图不再自带“AI 脏感”
人工智能·经验分享·aigc
searchforAI13 小时前
5款AI笔记工具实测:导入体验、结构化输出、后续能力逐项对比
人工智能·笔记·学习·ai·chatgpt·aigc·音视频
Mind-Explorer13 小时前
OpenAI RLHF的理解
aigc
陆业聪15 小时前
Agent智能体:让AI自己调API干活——从Android Service到AI Agent的思维跃迁
android·人工智能·aigc
李姆斯1 天前
给 AI Agent 造好用的锤子:复杂系统的 Tool 抽象设计
aigc·agent
小溪彼岸1 天前
初识Codex桌面端
aigc
西陵1 天前
拆解 Claude Code Memory:AI Agent 如何真正“记住”项目
aigc·openai·ai编程