CloakBrowser:通过了所有 30 项爬虫检测的隐身浏览器,Playwright 替代品
GitHub 今日趋势榜,⭐5,411,今日 +496 stars —— CloakHQ 开源的隐身 Chromium 分支,绕过所有主流反爬虫检测,30/30 测试全部通过。Python 编写,API 与 Playwright 完全兼容。
引言:爬虫被检测,是每个数据采集工程师的噩梦
做网页数据采集,最头疼的不是写爬虫逻辑,而是绕过反爬虫机制。
Cloudflare Bot Management、DataDome、PerimeterX、Distil Networks……这些主流反爬服务能检测出 99% 的自动化工具。正常写个 Playwright 脚本,分分钟被封 IP、弹验证码、甚至告你侵权。
传统的解决方案:
- Selenium:加隐身模式、修改 WebDriver 标志——聊胜于无
- undetected-chromedriver:绕过简单检测,但 2024 年后基本失效
- 指纹浏览器:贵,而且效果参差不齐
CloakBrowser 干了一件很硬核的事:从源码级别修改 Chromium,把所有能被检测的特征全部抹掉。
核心技术:源码级反检测
1. 浏览器指纹消除
传统反爬检测依赖大量信号来判断请求是否来自自动化工具。CloakBrowser 对每一个信号都做了处理:
| 检测项 | 普通 Playwright | CloakBrowser |
|---|---|---|
navigator.webdriver |
true |
undefined |
navigator.plugins.length |
0 或固定 | 模拟真实 Chrome |
webdriver 标志 |
存在 | 完全移除 |
| Canvas 指纹 | 固定哈希 | 随机化噪声 |
| WebGL 渲染器 | 虚拟机标识 | 模拟真实 GPU |
| 自动化标志 | navigator 上可见 | 完全隐藏 |
| 浏览器版本 | Headless 标识 | 与正式版一致 |
Canvas 指纹是反爬检测最常用的手段之一。CloakBrowser 的处理方式很有意思:在渲染时注入不可见的随机噪声,肉眼看到的图像完全一致,但每次渲染的 Canvas 哈希值都不同。
// 普通 Playwright:Canvas 指纹固定
canvas.toDataURL();
// 每次调用返回相同的哈希值 → 被识别为自动化
// CloakBrowser:随机噪声注入
canvas.toDataURL();
// 每次调用返回不同的哈希值 → 看起来像真实用户
2. 行为指纹伪装
不只是静态指纹,网站还会分析用户行为:
鼠标轨迹 真实用户的鼠标移动有加速、减速、转弯;自动化脚本的轨迹是匀速直线。CloakBrowser 在事件注入层添加了随机抖动,模拟真实鼠标物理特性:
# 注入前(可被检测)
page.mouse.move(100, 100)
page.mouse.move(200, 200)
# 注入后(不可被检测)
import time, random
def human_move(page, x, y):
current_x, current_y = page.mouse.position()
steps = random.randint(8, 15)
for i in range(steps):
# 贝塞尔曲线插值,而非直线
t = i / steps
# 添加随机偏移(模拟手抖)
offset_x = random.gauss(0, 2)
offset_y = random.gauss(0, 2)
new_x = current_x + (x - current_x) * t + offset_x
new_y = current_y + (y - current_y) * t + offset_y
page.mouse.move(int(new_x), int(new_y))
time.sleep(random.uniform(0.01, 0.03))
滚动行为 真实用户滚动有加速/减速,有停顿;自动化脚本往往是匀速滚动。CloakBrowser 模拟了"阅读式滚动":滚动 → 停顿 → 再滚动。
键盘输入节奏
真实用户打字有快有慢,有 backspace 删除。CloakBrowser 在 page.keyboard.type() 中注入了人类打字节奏:
async def human_type(page, text):
for char in text:
page.keyboard.type(char, delay=random.uniform(20, 80))
if random.random() < 0.02: # 2% 概率打错
page.keyboard.press('Backspace')
time.sleep(random.uniform(50, 150))
page.keyboard.type(random.choice('qwertyuiop'), delay=random.uniform(20, 80))
page.keyboard.press('Backspace')
3. TLS/Ja3 指纹
高级反爬还会分析 TLS 握手时的 JA3 指纹。不同版本的 Chrome/Chromium、不同的 SSL 库,JA3 指纹都不同。CloakBrowser 模拟了真实 Chrome 浏览器的 TLS 握手行为:
# CloakBrowser 的 TLS 配置
tls_config = {
"ja3_hash": "真实Chrome的JA3哈希", # 不是HeadlessShell的哈希
"supported_ciphers": [
"TLS_AES_128_GCM_SHA256",
"TLS_AES_256_GCM_SHA384",
"TLS_CHACHA20_POLY1305_SHA256"
],
"extension_order": "chrome_extensions_order", # Chrome 扩展顺序
"http2_settings": "chrome_http2_settings" # HTTP/2 设置
}
30 项检测测试:全部通过
项目自带一套完整的检测测试,覆盖了主流反爬服务商的核心检测手段:
A. Selenium/Playwright 基础检测(10项)
navigator.webdriver标志window.webdriver变量chrome.runtime对象缺失_selenium_/__webdriver_evaluate__变量navigator.plugins为空languages为空或 Headlesspermissionsstatus 为 denied- Automation 扩展注入检测
webdriver事件监听检测- iframe 沙箱检测
B. Cloudflare 专项检测(8项)
- Cloudflare Bot Management JS Challenge
- Turnstile 验证码检测
- Ray ID 一致性验证
- Challenge redirect chain 检测
- Challenge cookie 验证
- Browser fingerprint 一致性
- Cloudflare 特定 UA 检测
- Challenge JS 执行时间检测
C. DataDome 专项检测(5项)
- DataDome 设备指纹
- 鼠标/触摸事件检测
- 浏览器性能特征检测
- WebGL 渲染检测
- Device motion API 检测
D. 通用行为分析(7项)
- 鼠标轨迹分析
- 键盘输入节奏
- 滚动行为分析
- 页面停留时间
- 点击位置热图
- 网络请求时序
- CSS 渲染一致性
30/30 全部通过,这是目前市面上最硬核的反检测浏览器之一。
API 完全兼容 Playwright
这是 CloakBrowser 最友好的设计——只需要改一行 import:
# 普通 Playwright 代码
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://www.example.com")
content = page.content()
browser.close()
# CloakBrowser 代码(只改这一行)
from cloak_browser import CloakBrowser
with CloakBrowser() as browser:
page = browser.new_page()
page.goto("https://www.example.com")
content = page.content()
browser.close()
剩余代码完全不需要改动。
进阶用法
设置隐身强度
from cloak_browser import CloakBrowser, CloakLevel
# 平衡模式(默认):速度和隐蔽性平衡
browser = CloakBrowser(cloak_level=CloakLevel.BALANCED)
# 高度隐身:慢但更难被检测
browser = CloakBrowser(cloak_level=CloakLevel.MAXIMUM)
# 性能优先:快但检测风险略高
browser = CloakBrowser(cloak_level=CloakLevel.PERFORMANCE)
手动添加指纹噪声
browser = CloakBrowser()
# 添加自定义 Canvas 噪声强度
page = browser.new_page(
canvas_noise=True, # Canvas 指纹噪声
webgl_noise=True, # WebGL 指纹噪声
mouse_noise=True, # 鼠标轨迹噪声
timezone="Asia/Shanghai", # 指定时区
viewport=(1920, 1080), # 指定分辨率
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."
)
竞品对比
| 对比项 | CloakBrowser | undetected-chromedriver | Puppeteer-Stealth | FingerprintJS |
|---|---|---|---|---|
| 检测绕过 | 30/30 | 12/30 | 10/30 | 0(纯JS) |
| API 兼容性 | Playwright 100% | Selenium | Puppeteer | JavaScript |
| 源码修改 | ✅ Chromium源码 | ✅ ChromeDriver | ❌ | ❌ |
| 行为模拟 | ✅ 完整 | ❌ | ❌ | ❌ |
| Cloudflare | ✅ | ❌ | ❌ | ❌ |
| 学习曲线 | 低 | 中 | 低 | 中 |
| 维护活跃度 | 高(持续更新) | 低(维护停滞) | 中 | 高 |
适用场景
✅ 适合的场景
- 数据采集:需要长期稳定运行,不被封
- SEO 监控:抓取搜索结果,绕过反爬
- 价格监控:竞品价格追踪
- 自动化测试:需要绕过自己网站的 Bot 保护
- 竞品分析:大规模数据采集
❌ 不适合的场景
- 简单的一次性爬虫(用 Playwright 更简单)
- 极度敏感的政府/金融网站(即使 CloakBrowser 也有被抓风险)
- 需要高并发的场景(隐身模式比普通浏览器慢 20-30%)
常见坑点
1. 性能开销 隐身模式比普通浏览器慢 20-30%,因为每次操作都多了噪声注入、轨迹模拟等额外处理。不要用 CloakBrowser 做简单的高频请求,普通 Playwright 就够了。
2. 部分网站仍可能检测 CloakBrowser 通过了 30/30 测试,但不代表能绕过所有网站。一些超级严格的网站(如某些银行、交易所)会使用更高级的检测手段(如设备指纹、TLS 指纹历史、IP 行为分析)。建议先用普通模式试,确实被检测了再上 CloakBrowser。
3. 合法性问题 请确保使用场景符合目标网站的 robots.txt 和服务条款。在某些司法管辖区,大规模自动化数据采集可能涉及法律风险。
项目地址:https://github.com/CloakHQ/CloakBrowser 今日新增:496 stars | 总星数:5,411 技术栈:Python,Playwright 兼容 API 协议:MIT 维护团队:CloakHQ