跳到主要内容
CloakBrowser · prolist
返回项目库查看仓库原始简介 Stealth Chromium that passes every bot detection test. Drop-in Playwright replacement with source-level fingerprint patches. 30/30 tests passed.
项目解读 README
项目解读由 AI 根据历史资料整理,尚未经人工复核。仓库资料更新于 2026-09-08,与历史解读分开保留。
项目概览 CloakBrowser 是一个基于 Chromium 的隐身浏览器自动化工具,其核心思路是在 Chromium 的 C++ 源码层面修改浏览器指纹,编译出定制二进制文件,使反爬虫/反机器人系统无法识别其为自动化浏览器。它属于反检测浏览器自动化领域,介于传统浏览器自动化和商业反检测浏览器之间,提供与 Playwright/Puppeteer 完全兼容的 Python 和 JavaScript API。项目通过修改 49–57 处 C++ 源码,覆盖 Canvas、WebGL、Audio、字体、GPU、屏幕、WebRTC、网络计时、自动化标志、CDP、硬件参数、UA 等多个指纹维度,并采用种子驱动的确定性指纹生成系统,确保指纹内部一致性。同时提供 humanize 行为模拟,通过拦截页面方法调用,将鼠标移动、键盘输入、滚动等交互替换为人类模拟版本。定制 Chromium 二进制在 TLS 层面也与正常 Chrome 一致。项目支持 HTTP/SOCKS5 代理、持久化 Profile、Docker 部署及 AWS Lambda 部署。
解决什么问题 传统反检测方案存在多个痛点。JS 注入方案(如 playwright-stealth、puppeteer-extra-plugin-stealth)通过注入 JavaScript 隐藏自动化痕迹,但反检测系统已学会检测注入本身。配置级补丁(如 undetected-chromedriver)每次 Chrome 更新都会失效。传统方案只修补个别检测点,指纹一致性差,现代反检测系统会交叉验证 Canvas 哈希、WebGL 渲染器、音频指纹、GPU 信息、字体列表、屏幕分辨率、硬件并发数等几十个信号。自动化工具的行为特征(鼠标瞬移、键盘瞬间填充、滚动跳转)也会被行为分析检测。标准 Playwright/Puppeteer 的 TLS 握手指纹(ja3/ja4)与正常 Chrome 不同,Akamai、Cloudflare 等系统可通过 TLS 指纹识别自动化工具。商业反检测浏览器月费 $49–299,多为 GUI 操作,不适合大规模编程自动化,且闭源无法审计安全性。
工作方式 CloakBrowser 的核心是在 Chromium 源码中直接修改 49–57 处 C++ 代码,覆盖 Canvas、WebGL、Audio、Fonts、GPU、Screen、WebRTC、Network、Automation、CDP、Hardware、UA 等指纹维度,编译进二进制,运行时无可检测的篡改痕迹。使用种子驱动的确定性指纹生成:无参数启动时自动生成随机种子(10000–99999),每次启动产生全新指纹;固定种子(--fingerprint=12345)则相同种子产生相同指纹,适合回访场景。所有指纹参数由种子确定性推导,确保内部一致性。humanize=True 启用行为模拟,通过拦截 Playwright/Puppeteer 的页面方法调用,将鼠标移动替换为贝塞尔曲线加缓动和轻微过冲,键盘输入替换为逐字输入加思考停顿和偶尔打错再纠正,滚动替换为加速、巡航、减速的微步滚动。定制 Chromium 二进制在 TLS 层面与正常 Chrome 一致,ja3/ja4/Akamai TLS 指纹完全匹配,DNS/连接/SSL 计时被清零。
核心能力
源码级指纹补丁:49–57 处 C++ 修改编译进二进制,运行时无篡改痕迹
种子驱动确定性指纹:相同种子产生相同指纹,支持回访场景
指纹内部一致性:GPU 供应商和屏幕分辨率等参数逻辑一致
humanize 行为模拟:贝塞尔曲线鼠标移动、逐字键盘输入、微步滚动
TLS 指纹修复:ja3/ja4/Akamai TLS 指纹与正常 Chrome 完全一致
API 兼容:完全兼容 Playwright/Puppeteer API,零学习成本迁移
双语言支持:Python 和 JavaScript/TypeScript
免费开源:MIT 协议,无订阅费用
自动更新:后台检查二进制更新
多平台支持:Linux x64、macOS arm64、Windows x64
持久化 Profile:launch_persistent_context() 保持 cookies/localStorage
Docker 镜像和 AWS Lambda 部署支持
使用前需要了解
AI 整理 · 本地测试,未经人工复核;依据历史报告节选,不代表当前产品状态。
报告明确说明 CloakBrowser 不解决已出现的验证码,其策略是预防验证码出现。不内置代理轮换,需要自行管理代理池。不内置验证码解决,需要时需集成第三方服务。Profile 管理功能相比商业方案较基础。主要模拟桌面浏览器,移动端指纹模拟能力有限。定制 Chromium 二进制约 200MB,首次下载需等待。定制 Chromium 的具体补丁代码未完全公开,用户需信任 CloakHQ 团队。Chromium 大版本升级时需重新编译和发布二进制。源码 MIT 开源,但定制 Chromium 二进制有单独的使用协议,禁止用于银行欺诈、凭证填充等非法用途。如果目标网站没有反检测系统,直接用标准 Playwright 即可。
简体中文 · AI 译文 原文
AI 中文译文,非官方翻译;安装命令与技术细节请对照原文。
pip install cloakbrowser
npm install cloakbrowser
docker run --rm cloakhq/cloakbrowser cloaktest
from cloakbrowser import launch
browser = launch()
page = browser.new_page()
page.goto("https://example.com")
browser.close()
import { launch } from 'cloakbrowser';
const browser = await launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
也适用于 Puppeteer: import { launch } from 'cloakbrowser/puppeteer' (详情 )
对于有反机器人保护的网站 ,添加住宅代理和以下标志:
browser = launch(
proxy="http://user:pass@residential-proxy:port", # residential IP, not datacenter
geoip=True, # match timezone + locale to proxy IP
headless=False, # some sites detect headless even with C++ patches
humanize=True, # human-like mouse, keyboard, scroll
)
const browser = await launch({
proxy: 'http://user:pass@residential-proxy:port',
geoip: true,
headless: false,
humanize: true,
});
参见 故障排除 了解特定站点问题(FingerprintJS、Kasada、reCAPTCHA)。
安装 # With Playwright
npm install cloakbrowser playwright-core
# With Puppeteer
npm install cloakbrowser puppeteer-core
dotnet add package CloakBrowser
首次运行时,隐形 Chromium 二进制文件会自动下载(约 200MB,本地缓存)。
pip install 'cloakbrowser[geoip]'
- from playwright.sync_api import sync_playwright
- pw = sync_playwright().start()
- browser = pw.chromium.launch()
+ from cloakbrowser import launch
+ browser = launch()
page = browser.new_page()
page.goto("https://example.com")
# ... rest of your code works unchanged
最新:v0.5.10 — 73 个源码级隐形补丁(Chromium 151.0.7922.108.3)
CloakBrowser Pro 稳定版 — Chromium 151.0.7922.108.3 在 Linux x64、Linux ARM64、Windows x64 和 macOS 上。设置 license_key (licenseKey (在 JS 中)或 CLOAKBROWSER_LICENSE_KEY 环境变量,包装器会自动为您的平台获取最新的稳定版构建。参见 CloakBrowser Pro
CloakBrowser Pro 预览版 — Chromium 151.0.7922.108.4 在 Linux x64 和 Linux ARM64 上;Windows x64 和 macOS 跟踪 151.0.7922.108.3。通过 release_channel="preview" 或 CLOAKBROWSER_RELEASE_CHANNEL=preview选择加入。
.NET 8 / C# 客户端 — CloakBrowser 现在以 NuGet 包形式发布(CloakBrowser),与 Python 和 JS 包装器保持一致。
Chromium 151 升级 — 将完整补丁集重新基于 Chromium 151(Linux + Windows),并对照参考数据重新验证;macOS 仍保持在 Chromium 150 稳定版线
73 个指纹补丁 — 跨 Linux 和 Windows 的渲染一致性改进,修正 GPU/显示/图形参数以匹配标准 Chrome 配置文件
Windows 原生 GPU 直通 — 真实硬件值直接传递而非伪造,匹配真实浏览器行为
HTTP 代理内联凭据 — 新的网络层支持带内联认证的代理
extension_paths — 在所有启动函数中加载 Chrome 扩展
拟人化可操作性 — 在拟人化操作前自动等待可见、启用、稳定的元素
每次调用 human_config — 在单个方法调用上覆盖拟人化设置
可组合的 JS 辅助函数 — buildLaunchOptions() 和 humanizeBrowser() 用于自定义 Playwright 集成
原生 SOCKS5 代理 — proxy="socks5://user:pass@host:port" 可直接用于所有启动函数,Python + JS。QUIC/HTTP3 通过 UDP ASSOCIATE 经 SOCKS5 隧道传输
代理信号移除 — DNS/连接/SSL 时序归零,代理缓存头剥离,Proxy-Connection 头泄漏移除
Chromium 146 升级 — 将所有补丁从 145.0.7632.x 重新基于到 146.0.7680.177
WebRTC IP 伪装 — --fingerprint-webrtc-ip=auto 解析您代理的出口 IP 并伪装 WebRTC ICE 候选。使用 geoip=True 时自动注入(无额外网络调用)
humanize=True — 一个标志使所有鼠标、键盘和滚动交互都像真实用户。贝塞尔曲线、逐字符输入、逼真的滚动模式
零标志隐形 — 二进制文件在启动时自动生成随机指纹种子。无需配置
从代理 IP 获取时区和区域设置 — launch(proxy="...", geoip=True) 自动检测时区和区域设置
持久化配置文件 — launch_persistent_context() 跨会话保留 cookies 和 localStorage,绕过隐身检测
为什么选择 CloakBrowser?
配置级补丁会失效 — playwright-stealth, undetected-chromedriver,以及 puppeteer-extra 注入 JavaScript 或调整标志。每次 Chrome 更新都会破坏它们。反机器人系统本身就能检测到这些补丁。
CloakBrowser 修补 Chromium 源代码 — 指纹在 C++ 层面被修改,编译进二进制文件。检测网站看到的是一个真实浏览器,因为它就是 一个真实浏览器。
源码级隐身 — C++ 补丁在二进制层面处理指纹(GPU、屏幕、UA、硬件报告)。无 JavaScript 注入,无配置级黑客手段。大多数隐身工具只做表面修补。
处处行为一致 — 在本地、Docker 和 VPS 上运行完全相同。无需特定环境的补丁或配置。
兼容 AI 代理和自动化框架 — 为 browser-use、Crawl4AI、Scrapling、Stagehand、LangChain、Selenium 等提供即插即用的隐身能力。参见 集成 。
CloakBrowser 不解决 CAPTCHA——它防止 CAPTCHA 出现。无验证码解决服务,无内置代理轮换——自带代理,使用你已熟悉的 Playwright API。
CloakBrowser Pro 反机器人系统每周都在变化,旧二进制文件会悄然退化。最新构建才是持续通过检测的那个。免费试用,正式运行时再升级。
免费,最新构建(Chromium 151) — 最新的二进制文件,正是那个在实时检测中保持 绿色通过 的版本。GitHub 登录即可免费使用,一个并发会话。获取你的密钥 或运行 cloakbrowser login,然后拿它去挑战你最难的靶子。
Pro — 当它用于生产级爬取、QA、监控或自动化时:可扩展到 5、20、200、2,000 或更多并发会话 ,始终最先获得最新补丁,并提供人工支持。支持 Linux、Windows、macOS。查看方案和定价 →
v146 — 旧构建在 GitHub Releases 上保持免费。适合快速初体验,但随着检测演进会很快过时。
cloakbrowser login # GitHub sign-in for a free key, or paste a paid key
# ...or set it directly (env var, license_key= param, or ~/.cloakbrowser/license.key):
export CLOAKBROWSER_LICENSE_KEY=cb_xxxxxxxx
CloakBrowser Manager 带 GUI 的反检测浏览器。 Multilogin、GoLogin 和 AdsPower 的自托管替代品,基于同一引擎,运行在你自己的机器上,而不是别人的云端。
每个配置文件都是一台真正独立的计算机:拥有自己的指纹、GPU、屏幕、时区、代理、Cookie 和历史记录。它们之间没有任何数据泄漏。关闭一个配置文件,下个月重新打开,它还是同一个人,已预热就绪。
无限配置文件 — 大品牌按配置文件收费,达到上限后还会把你推向更高档位。这里配置文件无限,你只为同时运行的数量付费。一抽屉休眠账户不花一分钱。
原生桌面应用 — 配置文件在 Windows 和 macOS 上以普通窗口打开。在 Linux 服务器上,它们在 Docker 中运行并流式传输到你的浏览器。
真正的引擎 — 大多数配置文件管理器向普通浏览器注入 JavaScript。这里的每个配置文件都运行本仓库提供的修补版 Chromium 二进制文件。
自动化你所见的 — 每个运行中的配置文件都暴露一个 CDP 端点。用 Playwright 或 Puppeteer 驱动它,同时实时观看完全相同的窗口。
一个密钥,两款产品 — 你的 CloakBrowser 密钥同样适用于 Manager。GitHub 登录即可免费使用一个配置文件。
这也是无需编写任何代码就能体验浏览器的最快方式:下载、创建配置文件、点击 Launch 。
测试结果 所有测试均针对实时检测服务验证。除非另有说明,以下结果为最新 Pro/当前构建。最后测试时间:2026 年 8 月(Chromium 151)。
证明
reCAPTCHA v3 — Score 0.9(请在原文查看)
Pro/最新构建:reCAPTCHA v3 得分 0.9 — 服务端验证(人类级)
Cloudflare Turnstile — Success(请在原文查看)
Cloudflare Turnstile 非交互式挑战 — 自动解决
BrowserScan — Normal(请在原文查看)
BrowserScan 机器人检测 — 正常(4/4 项检查通过)
FingerprintJS — Passed(请在原文查看)
Pro/最新构建:FingerprintJS 网页抓取演示 — 数据正常提供,未被拦截
deviceandbrowserinfo.com — You are human!(请在原文查看)
deviceandbrowserinfo.com 行为机器人检测 — “你是人类!” 且 humanize=True(24/24 信号通过)
对比
工作原理 CloakBrowser 是围绕定制构建的 Chromium 二进制文件的轻量封装(Python + JavaScript):
您安装 → pip install cloakbrowser 或 npm install cloakbrowser
首次启动 → 二进制文件自动为您的平台下载(Chromium 146)
每次启动 → Playwright 或 Puppeteer 使用我们的二进制文件 + 隐身参数启动
您编写代码 → 标准 Playwright/Puppeteer API,无需学习新内容
该二进制文件包含 73 个源代码级补丁,涵盖 canvas、WebGL、音频、字体、GPU、屏幕属性、WebRTC、网络时序、硬件报告、自动化信号移除以及模拟 CDP 输入行为。
这些补丁已编译进 Chromium 二进制文件——不是通过 JavaScript 注入,也不是通过标志设置。
二进制文件下载在解压前会对照已发布的校验和上的固定 Ed25519 签名进行验证,因此下载内容确认为正版(确实是我们的),而不仅仅是完整无损。被篡改的镜像无法提供被篡改或降级的二进制文件。
API
launch()from cloakbrowser import launch
# Basic — headless, default stealth config
browser = launch()
# Headed mode (see the browser window)
browser = launch(headless=False)
# Latest binary — pass a key (free via `cloakbrowser login`, or paid) or set CLOAKBROWSER_LICENSE_KEY
browser = launch(license_key="cb_xxxxxxxx")
# With proxy (HTTP or SOCKS5)
browser = launch(proxy="http://user:pass@proxy:8080")
browser = launch(proxy="socks5://user:pass@proxy:1080")
# With proxy dict (bypass, separate auth fields)
browser = launch(proxy={"server": "http://proxy:8080", "bypass": ".google.com", "username": "user", "password": "pass"})
# With extra Chrome args
browser = launch(args=["--disable-gpu"])
# With timezone and locale (sets binary flags — no detectable CDP emulation)
browser = launch(timezone="America/New_York", locale="en-US")
# Auto-detect timezone/locale from proxy IP (requires: pip install cloakbrowser[geoip])
# Also auto-injects --fingerprint-webrtc-ip to prevent WebRTC IP leaks (no extra cost)
# Note: makes HTTP calls through your proxy to resolve exit IP (ipify.org, checkip.amazonaws.com)
browser = launch(proxy="http://proxy:8080", geoip=True)
# Explicit timezone/locale always win over auto-detection
browser = launch(proxy="http://proxy:8080", geoip=True, timezone="Europe/London")
# WebRTC IP spoofing only (no geoip dep needed — resolves exit IP via HTTP call through proxy)
browser = launch(proxy="http://proxy:8080", args=["--fingerprint-webrtc-ip=auto"])
# Explicit WebRTC IP (no network call)
browser = launch(proxy="http://proxy:8080", args=["--fingerprint-webrtc-ip=1.2.3.4"])
# Human-like mouse, keyboard, and scroll behavior
browser = launch(humanize=True)
# With slower, more deliberate movements
browser = launch(humanize=True, human_preset="careful")
# Without default stealth args (bring your own fingerprint flags)
browser = launch(stealth_args=False, args=["--fingerprint=12345"])
返回一个标准的 Playwright Browser 对象。所有 Playwright 方法均可用: new_page(), new_context(), close()等。
launch_async()import asyncio
from cloakbrowser import launch_async
async def main():
browser = await launch_async()
page = await browser.new_page()
await page.goto("https://example.com")
print(await page.title())
await browser.close()
asyncio.run(main())
launch_context()便捷函数,一次调用即可创建浏览器 + 上下文,并设置用户代理、视口、区域设置和时区:
from cloakbrowser import launch_context
context = launch_context(
user_agent="Custom UA",
viewport={"width": 1920, "height": 1080},
locale="en-US",
timezone="America/New_York",
)
page = context.new_page()
page.goto("https://protected-site.com")
context.close()
额外的 kwargs 会转发给 Playwright 的 browser.new_context() — 用于 storage_state, permissions, extra_http_headers等场景,无需持久化配置文件文件夹:
from cloakbrowser import launch_context
# Restore a saved session (cookies, localStorage) from a JSON file
context = launch_context(storage_state="state.json")
page = context.new_page()
page.goto("https://example.com")
# Save state back for next run
context.storage_state(path="state.json")
context.close()
launch_context_async()launch_context()的异步对应版本。签名和 kwargs 转发相同:
import asyncio
from cloakbrowser import launch_context_async
async def main():
ctx = await launch_context_async(storage_state="state.json")
page = await ctx.new_page()
await page.goto("https://example.com")
await ctx.storage_state(path="state.json")
await ctx.close()
asyncio.run(main())
launch_persistent_context()与 launch_context()相同,但使用持久化用户配置文件。Cookie、localStorage 和缓存会在会话之间持久保留。
保持登录状态 (Cookie/会话在重启后仍然有效)
绕过隐身检测 (某些网站会标记空、临时的配置文件)
加载 Chrome 扩展 (扩展只能从真实的用户数据目录运行)
构建自然的浏览历史 (缓存的字体、Service Worker、IndexedDB 会随时间累积,使配置文件看起来更真实)
播放受 DRM 保护的视频 (Widevine)— 通过侧载 CDM,包装器在首次启动时启用 Widevine(参见 Widevine / DRM )
from cloakbrowser import launch_persistent_context
# First run — creates the profile
ctx = launch_persistent_context("./my-profile", headless=False)
page = ctx.new_page()
page.goto("https://protected-site.com")
ctx.close() # profile saved
# Next run — cookies, localStorage restored automatically
ctx = launch_persistent_context("./my-profile", headless=False)
# Load Chrome extensions
ctx = launch_persistent_context(
"./my-profile",
headless=False,
extension_paths=["./my-extension"],
)
支持与 launch_context(): proxy, user_agent, viewport, locale, timezone, color_scheme, geoip, extension_paths相同的所有选项。
异步版本: launch_persistent_context_async()。
存储配额和隐身检测: 二进制文件默认规范化存储配额(这也会隐藏真实磁盘大小)。根据配额推断隐私/隐身模式的检测器——例如 BrowserScan 的隐身检查(−10%)——会将默认值读取为隐身模式。将其提高以呈现为常规配置文件:
ctx = launch_persistent_context("./my-profile", args=["--fingerprint-storage-quota=5000"])
Widevine / DRM 该二进制文件内置 Widevine 支持,但 Widevine CDM 是 Google 的专有组件,我们无法重新分发。通过以下两种方式之一获取(完整背景见 #96 ):
获取它 — 无需安装 Chrome;从 Google 的组件服务器拉取 CDM(仅限 Linux x86-64;已验证 SHA-256 + CRX3 签名)。它会存放在 ~/.cloakbrowser/WidevineCdm,包装器会自动检测——无需环境变量:
python3 bin/fetch-widevine.py
或从现有 Chrome 安装中复制 ,放在二进制文件旁边:
cp -r /opt/google/chrome/WidevineCdm ~/.cloakbrowser/chromium-<version>/WidevineCdm
(在 Docker 中,只需传递 -e CLOAKBROWSER_FETCH_WIDEVINE=1 — 入口点会自动运行获取;请参阅下面的 Docker 说明。)
CDM 就位后, launch_persistent_context() 在首次启动 时启用 Widevine — 包装器会自动将 CDM 提示文件写入配置文件,因此您无需手动执行两次启动的变通方法。这使您可以播放受 DRM 保护的视频(例如 Netflix、Spotify Web)。
from cloakbrowser import launch_persistent_context
# WidevineCdm sideloaded next to the binary -> Widevine works on first launch
ctx = launch_persistent_context("./my-profile", headless=False)
仅限 Linux。 Chromium 的提示文件机制是 Linux/ChromeOS 特有的。在 Windows 上 CDM 无法初始化(DRM 主机验证),macOS 使用不同的布局,因此在那里播种是无效操作。
按存在自动启用。 无需标志 — 侧载 CDM 即表示选择加入。使用 CLOAKBROWSER_WIDEVINE_CDM=/path/to/WidevineCdm指向非默认位置的 CDM,或使用 CLOAKBROWSER_WIDEVINE=0完全禁用播种。
Docker — 自动获取(选择加入)。 镜像内没有 Chrome 可复制,因此官方镜像可以为您获取 CDM。使用 -e CLOAKBROWSER_FETCH_WIDEVINE=1 运行,它会在首次启动时从 Google 的组件服务器(与 Chrome 使用的相同来源)拉取 CDM,并将其缓存在挂载卷的 ~/.cloakbrowser/WidevineCdm 中,包装器会自动检测到它 — 适用于免费或 Pro 二进制文件,也适用于 docker exec'd 脚本。默认关闭 — 除非您选择加入,否则不会进行网络调用 — 并且尽力而为,因此获取失败绝不会阻止启动。下载在安装前会进行签名和校验和验证。裸机 Linux 用户可以直接运行相同的获取器: python3 bin/fetch-widevine.py (仅 pip 安装可以从仓库获取该独立文件)。
CLI 从命令行预下载二进制文件、诊断您的设置或管理缓存:
python -m cloakbrowser login # Get a free key via GitHub, or save a paid key
python -m cloakbrowser logout # Remove the saved key (revert to the free binary)
python -m cloakbrowser install # Download binary with progress output
python -m cloakbrowser info # Diagnostics: binary that will launch, license tier, env checks
python -m cloakbrowser update # Check for and download newer binary
python -m cloakbrowser clear-cache # Remove cached binaries
login 无参数时提示您粘贴许可证密钥或按 Enter 通过 GitHub 登录获取免费密钥; login <key> 直接保存密钥。两者都会验证密钥,然后将其存储在 ~/.cloakbrowser/license.key ,以便每次启动都能获取。
info 报告根据您的许可证实际将启动的二进制文件,运行快速启动测试(并在 Linux 上标记缺失的系统库),显示您的许可证层级,并检查字体、GeoIP 和可选依赖项。添加 --quick 跳过启动测试或 --json 获取机器可读输出。添加 --proxy <url> 解析启动将通过该代理应用的出口 IP、时区和区域设置(相同的 geoip=True 解析;如果未缓存则下载 GeoIP 数据库)— 用于确认代理为您提供的时区/区域设置与其出口 IP 匹配。
CLOAKBROWSER_RELEASE_CHANNEL=preview 也适用于 install, info,以及 update. info 显示将启动的确切版本以及 Preview 是否为当前平台解析为 Stable。
相同的命令可通过 npx cloakbrowser <command> (JS)和 cloakbrowser CLI(.NET)使用。
实用函数 from cloakbrowser import binary_info, clear_cache, ensure_binary
# Check binary installation status
print(binary_info())
# {'version': '146.0.7680.177.5', 'platform': 'linux-x64', 'installed': True, ...}
# Force re-download
clear_cache()
# Pre-download binary (e.g., during Docker build)
ensure_binary()
JavaScript / Node.js API CloakBrowser 附带一个包含完整类型定义的 TypeScript 包。选择 Playwright 或 Puppeteer — 底层是相同的隐身二进制文件。
Playwright(默认) import { launch, launchContext, launchPersistentContext } from 'cloakbrowser';
// Basic
const browser = await launch();
// Pro — use the latest binary (or set CLOAKBROWSER_LICENSE_KEY env var)
const browser = await launch({ licenseKey: 'cb_xxxxxxxx' });
// With options
const browser = await launch({
headless: false,
proxy: 'http://user:pass@proxy:8080',
args: ['--fingerprint=12345'],
timezone: 'America/New_York',
locale: 'en-US',
humanize: true,
});
// Convenience: browser + context in one call
const context = await launchContext({
userAgent: 'Custom UA',
viewport: { width: 1920, height: 1080 },
locale: 'en-US',
timezone: 'America/New_York',
});
const page = await context.newPage();
// Persistent profile — cookies/localStorage survive restarts, avoids incognito detection
const ctx = await launchPersistentContext({
userDataDir: './chrome-profile',
headless: false,
proxy: 'http://user:pass@proxy:8080',
});
注意: 上面的每个示例都是独立的 — 不应作为一个代码块运行。
所有 Python 选项在 JS 中均可用: stealthArgs: false 禁用默认值, geoip: true 从代理 IP 自动检测时区/区域设置。
Puppeteer
注意: 对于使用 reCAPTCHA Enterprise 的网站,推荐使用 Playwright 封装。Puppeteer 的 CDP 协议会泄露自动化信号,reCAPTCHA Enterprise 可以检测到这些信号,导致间歇性 403 错误。这是 Puppeteer 的已知限制,并非 CloakBrowser 特有。使用 Playwright 可获得最佳效果。
import { launch } from 'cloakbrowser/puppeteer';
const browser = await launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
实用函数(JS) import { ensureBinary, clearCache, binaryInfo } from 'cloakbrowser';
// Pre-download binary (e.g., during Docker build)
await ensureBinary();
// Check installation status
console.log(binaryInfo());
// Force re-download
clearCache();
人类行为模拟 传递 humanize=True 可使所有鼠标、键盘和滚动交互与真实用户无法区分。所有 Playwright 调用(page.click(), page.fill(), page.type(), page.mouse.*, page.keyboard.*、Locator API)和 Puppeteer 调用(page.click(), page.type(), page.mouse.*, page.keyboard.*、ElementHandle API)都会自动替换为类人等效操作。无需更改代码。
browser = launch(humanize=True)
page = browser.new_page()
page.goto("https://example.com")
page.locator("#email").fill("user@example.com") # per-character timing, thinking pauses
page.locator("button[type=submit]").click() # Bézier curve, realistic aim point
// Playwright
import { launch } from 'cloakbrowser';
const browser = await launch({ humanize: true });
// Puppeteer
import { launch } from 'cloakbrowser/puppeteer';
const browser = await launch({ humanize: true });
预设 — default (正常速度)或 careful (较慢、更谨慎,操作之间有微小的空闲移动):
browser = launch(humanize=True, human_preset="careful")
const browser = await launch({ humanize: true, humanPreset: 'careful' });
browser = launch(humanize=True, human_config={
"mistype_chance": 0.05, # 5% typo rate with self-correction
"typing_delay": 100, # slower typing (ms per character)
"idle_between_actions": True, # micro-movements between clicks
"idle_between_duration": [0.3, 0.8], # idle duration range (seconds)
})
const browser = await launch({
humanize: true,
humanConfig: {
mistype_chance: 0.05,
typing_delay: 100,
idle_between_actions: true,
idle_between_duration: [0.3, 0.8],
}
});
如果某个特定调用需要原始速度,可在 page._original 访问未打补丁的原始 Playwright 页面。
注意(Playwright): 始终使用 page.click(selector), page.type(selector, text), page.hover(selector)或 page.locator(selector).* — 这些会经过完整的人性化处理流程。避免使用 page.query_selector() — ElementHandle 对象会绕过所有补丁,因此鼠标移动会瞬移,键盘事件无时序触发,滚动也没有人类曲线。
注意(Puppeteer): 基于选择器的方法(page.click(), page.type())和 ElementHandle 方法(el.click(), el.type())都已完全人性化。 page.$(), page.$$()和 page.waitForSelector() 会自动返回已打补丁的句柄。
由 @evelaa123 贡献 — 完整覆盖 Playwright 和 Puppeteer API。
配置
指纹管理 该二进制文件默认即隐身 — 无需任何标志。它在启动时自动生成随机指纹种子,并伪装所有可检测的值(GPU、硬件规格、屏幕尺寸、canvas、WebGL、音频、字体)。每次启动都会产生一个全新的、连贯的身份。
该二进制文件在编译时检测其平台 — macOS 二进制文件报告为带 Apple GPU 的 macOS,Linux 二进制文件报告为带 NVIDIA GPU 的 Linux。封装器 在 Linux 上通过传递 --fingerprint-platform=windows覆盖此行为,因此会话显示为 Windows 桌面(更常见的指纹,更难聚类)。直接运行二进制文件时,使用 --fingerprint-platform 进行跨平台伪装。
提示:重新访问同一站点时使用固定种子。 随机种子会使每个会话看起来像不同的设备 — 当从同一 IP 反复访问同一站点时,这可能很可疑。对于 reCAPTCHA v3 Enterprise 和类似的评分系统,固定种子可在会话间产生一致的指纹,使您看起来像回访访客:
browser = launch(args=["--fingerprint=12345"])
const browser = await launch({ args: ['--fingerprint=12345'] });
默认指纹 每次 launch() 调用都会自动设置这些。封装器 应用平台感知默认值 — 在 Linux 上伪装为 Windows 以获得更常见的指纹,在 macOS 上作为原生 Mac 浏览器运行:
二进制文件从种子自动生成所有其他内容:GPU、硬件并发、设备内存和屏幕尺寸。每个种子产生一个独特、一致的指纹。如有需要,可使用显式标志覆盖。
直接使用二进制文件? 它开箱即用,零标志 — 二进制文件自动伪装所有内容。传递 --fingerprint=seed 以获得持久身份,或使用显式标志如 --fingerprint-gpu-renderer 覆盖任何自动生成的值。
附加标志 二进制文件支持但默认不设置 — 通过 args 传递以自定义:
注意: 所有隐身测试均使用上述默认指纹配置验证。更改这些标志可能影响检测结果——在生产环境中使用前请测试您的配置。
Linux上的字体设置 在Linux上,CloakBrowser默认模拟Windows 平台。有两层字体很重要,大多数设置只做了第一层:
1. 基线(最低要求)——表情符号 + CJK画布字体。 激进的防机器人系统(Kasada、Akamai)在隐藏画布上渲染表情符号并哈希像素输出。最小化Linux环境(Docker、云虚拟机)缺少这些,产生的哈希与任何真实浏览器都不匹配。这是底线,不是终点:
sudo apt install -y fonts-noto-color-emoji fonts-freefont-ttf fonts-unifont \
fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf
Docker镜像(cloakhq/cloakbrowser)预装了这些。如果您直接在Linux服务器或自定义Docker镜像上运行二进制,请手动安装它们。
2. 真实Windows字体——强烈推荐( --fingerprint-windows-font-metrics必需)。 由于Linux默认角色是Windows,没有Windows字体的Windows浏览器本身就是机器人特征:字体指纹防机器人(FingerprintJS)会标记不匹配,CreepJS字体枚举得分也很差。上述apt包不 提供这些——它们是微软专有的,无法从软件包仓库安装,且 ttf-mscorefonts-installer 只有旧XP时代字体(不够)。
从真实Windows机器的 C:\Windows\Fonts\ 目录复制字体。包装器会持续警告,直到找到所有:Segoe UI、Segoe UI Light、Calibri、Marlett、MS UI Gothic、Franklin Gothic、Consolas、Courier New (复制整个 Fonts 文件夹可覆盖这些及更多):
mkdir -p ~/.local/share/fonts/windows
cp -r /path/to/windows/Fonts/. ~/.local/share/fonts/windows/
fc-cache -f
使用 fc-list | grep -i "segoe\|calibri\|consolas"确认它们已注册。一旦全部存在,警告自动停止;如果您接受权衡,设置 CLOAKBROWSER_SUPPRESS_FONT_WARNING=1 可静音警告。
示例 # Pin a seed for a persistent identity
browser = launch(args=["--fingerprint=42069"])
# Full control — disable defaults, set everything yourself
browser = launch(stealth_args=False, args=[
"--fingerprint=42069",
"--fingerprint-platform=windows",
])
# Override GPU to look like a specific machine
browser = launch(args=[
"--fingerprint-gpu-vendor=Intel Inc.",
"--fingerprint-gpu-renderer=Intel Iris OpenGL Engine",
])
示例
框架集成 CloakBrowser适用于任何使用Playwright或Chromium的框架:
# Option 1: Framework launches our binary directly (Selenium, Stagehand, UC)
from cloakbrowser.download import ensure_binary
from cloakbrowser.config import get_default_stealth_args
binary_path = ensure_binary() # auto-downloads if needed
stealth_args = get_default_stealth_args() # all fingerprint flags
# Option 2: CloakBrowser launches first, framework connects via CDP (browser-use, Crawl4AI, Scrapling)
from cloakbrowser import launch_async
browser = await launch_async(args=["--remote-debugging-port=9242"])
# Connect your framework to http://127.0.0.1:9242 — all stealth flags are set
# Note: humanize requires the wrapper (see below)
通过CDP人性化 :隐身指纹补丁可通过CDP自动工作,但 humanize=True 是包装器级别的功能。如果您通过CDP从单独脚本连接到CloakBrowser,请导入补丁函数以添加人性化:
import { patchBrowser, resolveConfig } from 'cloakbrowser/human';
patchBrowser(browser, resolveConfig('default'));
部署集成
平台 macOS 首次启动: 该二进制文件是临时签名的。首次运行时,macOS Gatekeeper 会阻止它。右键点击应用 → 打开 → 在对话框中点击 打开 。此操作只需一次。
Docker Docker Hub 上预构建的镜像 — 无需安装,无需设置。
专业版: 镜像附带免费二进制文件。设置 CLOAKBROWSER_LICENSE_KEY (例如 -e CLOAKBROWSER_LICENSE_KEY=cb_xxx,或在 Compose 中)后,最新二进制文件将在运行时下载。
快速测试 docker run --rm cloakhq/cloakbrowser cloaktest
运行脚本 # Inline script
docker run --rm cloakhq/cloakbrowser python -c "
from cloakbrowser import launch
browser = launch()
page = browser.new_page()
page.goto('https://example.com')
print(page.title())
browser.close()
"
# Mount your own script
docker run --rm -v ./my_script.py:/app/my_script.py cloakhq/cloakbrowser python my_script.py
# With a proxy
docker run --rm cloakhq/cloakbrowser python -c "
from cloakbrowser import launch
browser = launch(proxy='http://user:pass@proxy:8080')
page = browser.new_page()
page.goto('https://example.com')
print(page.title())
browser.close()
"
CDP 服务器模式 启动一个持久化的隐身浏览器,并通过 Chrome DevTools 协议远程连接:
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser cloakserve
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
browser = pw.chromium.connect_over_cdp("http://localhost:9222")
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
browser.close() # Disconnects from CDP; cloakserve keeps Chrome running
使用 connect_over_cdp()时,Playwright 不拥有远程 Chrome 进程。 browser.close() 仅断开客户端连接,因此 Chrome 会继续运行并保持其专业版会话席位。要立即终止它,请使用命名 fingerprint 种子连接并调用关闭端点:
curl -X POST http://localhost:9222/fingerprint/11111/close
如果您的框架需要直接的 WebSocket 端点,请获取 Chrome 的发现文档并使用重写后的 webSocketDebuggerUrl。该 URL 通过 cloakserve 指回,以便 CDP 代理保持每个种子的路由完整性:
curl http://localhost:9222/json/version | jq -r .webSocketDebuggerUrl
# ws://localhost:9222/devtools/browser/<browser-id>
curl 'http://localhost:9222/json/version?fingerprint=11111' | jq -r .webSocketDebuggerUrl
# ws://localhost:9222/fingerprint/11111/devtools/browser/<browser-id>
当 cloakserve 在反向代理或 TLS 终止器后面运行时,请转发公共主机/协议头,以便生成的 WebSocket URL 使用客户端实际可访问的地址:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
使用这些头后, /json/version 返回公共端点,例如 wss://cdp.example.com/fingerprint/11111/devtools/browser/<browser-id> ,而不是内部容器主机。
# With proxy
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser \
cloakserve --proxy-server=http://proxy:8080
# Headed mode (renders to Xvfb inside container)
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser \
cloakserve --headless=false
# Reap disconnected per-seed browser processes after 5 minutes
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser \
cloakserve --idle-timeout=300
docker stop cloak && docker rm cloak
安全: CDP 提供对浏览器的完全控制(执行 JS、读取页面、访问文件)。
示例绑定到 127.0.0.1 ,因此只有您的机器可以连接。切勿在未添加额外身份验证的情况下将端口 9222
暴露到公共互联网。
Docker Compose services:
cloakbrowser:
image: cloakhq/cloakbrowser
command: cloakserve
restart: unless-stopped
ports:
- "127.0.0.1:9222:9222"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9222/json/version"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
每连接指纹种子 — 从单个容器运行多个浏览器身份。每个唯一种子都会生成一个独立的 Chrome 进程,并带有自己的指纹:
# Each seed gets unique canvas noise, client rects, and other browser signals
b1 = pw.chromium.connect_over_cdp("http://localhost:9222?fingerprint=11111")
b2 = pw.chromium.connect_over_cdp("http://localhost:9222?fingerprint=22222")
# Full identity control via query params
b3 = pw.chromium.connect_over_cdp(
"http://localhost:9222?fingerprint=33333"
"&timezone=Asia/Tokyo&locale=ja-JP&platform=macos"
"&hardware-concurrency=4&device-memory=8"
)
# Auto-detect timezone/locale from proxy exit IP
b4 = pw.chromium.connect_over_cdp(
"http://localhost:9222?fingerprint=44444"
"&proxy=http://proxy:8080&geoip=true"
)
支持的查询参数: fingerprint, timezone, locale, platform, platform-version, brand, brand-version, gpu-vendor, gpu-renderer, hardware-concurrency, device-memory, screen-width, screen-height, proxy, geoip。相同种子复用相同进程(第一个连接的参数优先)。无种子 = 共享默认进程(向后兼容)。
默认情况下,每个种子的进程会一直存活到 cloakserve 退出;空闲清理已禁用(0)。如果客户端创建许多唯一种子,请设置 --idle-timeout=SECONDS 或 CLOAKSERVE_IDLE_TIMEOUT=SECONDS ,以便在其最后一个 CDP WebSocket 断开后自动终止该种子的 Chrome 进程。 0, off, false, none、或 disabled 会禁用空闲清理。当清理运行时,该种子在 --data-dir 下的临时配置文件目录也会被移除。在 GET / 检查活动进程(返回包含 PID、端口、连接数、空闲超时和待清理状态的 JSON)。
持久化配置文件 — 挂载卷以在容器重启后保留 Cookie 和会话:
docker run --rm -v ./my-profile:/profile cloakhq/cloakbrowser python -c "
from cloakbrowser import launch_persistent_context
ctx = launch_persistent_context('/profile')
page = ctx.new_page()
page.goto('https://example.com')
ctx.close()
"
使用相同卷再次运行 — Cookie、localStorage 和缓存会自动恢复。
要在持久化配置文件中启用 Widevine DRM(Netflix、Spotify Web 等),请添加 -e CLOAKBROWSER_FETCH_WIDEVINE=1 以在首次启动时自动获取 CDM(参见 [Widevine / DRM](#widevine--drm));它会缓存在挂载的卷中。
资源使用: 空闲约 190MB RAM,3 个标签页约 280MB。每增加一个标签页约 30MB。
使用您自己的镜像扩展 FROM cloakhq/cloakbrowser
COPY your_script.py /app/
CMD ["python", "your_script.py"]
从 pip 构建您自己的镜像 — 使用 python -m cloakbrowser install 在构建期间下载二进制文件并显示进度:
FROM python:3.12-slim
RUN pip install cloakbrowser && python -m cloakbrowser install
COPY your_script.py /app/
CMD ["python", "/app/your_script.py"]
docker build -t cloakbrowser .
CloakBrowser 在本地、Docker 和 VPS 上的工作方式完全相同。无需特定于环境的配置。
注意: 如果您在带有 uvloop 的 Web 服务器中运行 CloakBrowser(例如 uvicorn[standard]),请使用 --loop asyncio 以避免子进程管道挂起。
故障排除
在激进网站上仍然被阻止(DataDome、Turnstile)? 即使有我们的 C++ 补丁,某些网站仍会检测到无头模式。请使用有头模式 和虚拟显示运行:
# Install Xvfb (virtual framebuffer)
sudo apt install xvfb
# Start virtual display
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
from cloakbrowser import launch
# Headed mode + residential proxy for maximum stealth
browser = launch(headless=False, proxy="http://your-residential-proxy:port")
page = browser.new_page()
page.goto("https://heavily-protected-site.com") # passes DataDome, etc.
browser.close()
这会在虚拟显示上运行一个真实的有头浏览器 — 无需物理显示器。结合下面的推荐配置以获得最大隐身效果。
反机器人网站的推荐配置 大多数阻止源于缺少以下三项之一,而不是浏览器指纹检测:
browser = launch(
proxy="http://your-residential-proxy:port", # residential IP — datacenter IPs get blocked by reputation alone
geoip=True, # matches timezone + locale to proxy exit IP (without this: UTC + en-US = bot signal)
headless=False, # headed mode — some sites detect headless even with C++ patches
humanize=True, # human-like mouse, keyboard, scroll behavior
)
const browser = await launch({
proxy: 'http://your-residential-proxy:port',
geoip: true,
headless: false,
humanize: true,
});
如果你的代理支持 SOCKS5,请使用它以获得更好的兼容性——SOCKS5 隧道传输原始 TCP,避免了某些代理在 HTTP/2 下遇到的 HTTP CONNECT 问题:
browser = launch(proxy="socks5://user:pass@proxy:1080", geoip=True, headless=False, humanize=True)
被 FingerprintJS 检测到? FingerprintJS (demo.fingerprint.com/playground) 会检查多个信号。每种检测都有特定的原因:
在最新二进制文件(Linux,住宅代理)上通过 FPJS 的配置:
browser = launch(
headless=False,
proxy="http://user:pass@residential-proxy:port",
geoip=True,
args=[
"--fingerprint-noise=false", # prevents tampering detection
"--fingerprint-windows-font-metrics", # align font metrics — 148+ binary, needs Windows fonts
],
)
const browser = await launch({
headless: false,
proxy: 'http://user:pass@residential-proxy:port',
geoip: true,
args: [
'--fingerprint-noise=false',
'--fingerprint-windows-font-metrics', // align font metrics — 148+ binary, needs Windows fonts
],
});
需要 Chromium 148+ 二进制文件 和 Windows 字体 已安装(参见 Linux 上的字体设置 ); 使用 住宅代理 和 geoip=True运行。
持久化上下文 (launch_persistent_context / launchPersistentContext) 在最新的 Pro 二进制文件上使用相同的 FPJS 配置。使用真实的 userDataDir。存储配额调整与这里的 FingerprintJS 无关;它只影响从配额推断隐身模式的检测器,例如 BrowserScan(参见 存储配额 )。有关 DRM/媒体播放,请参见 Widevine / DRM 。
配置正确但在 Kasada / Akamai 网站上仍被阻止? 在极简的 Linux 环境中,缺少字体包会导致 canvas 表情符号渲染产生的哈希值不被反机器人系统识别。这是在代理、地理 IP 和有头模式都已正确设置后,在激进网站上被阻止的最常见原因。
网站对新会话发起挑战,但首次访问后即可正常工作 某些网站会挑战在 HTTP/2 下没有 cookie 的首次访问者。这会影响所有 Chromium 浏览器,而不仅仅是 CloakBrowser。使用持久化配置文件预热一次 cookie,然后在后续会话中重用:
from cloakbrowser import launch_persistent_context
# First run: warm up with --disable-http2
ctx = launch_persistent_context("./profile", args=["--disable-http2"])
page = ctx.new_page()
page.goto("https://example.com") # warms up cookies
ctx.close()
# Future runs — no --disable-http2 needed
ctx = launch_persistent_context("./profile")
page = ctx.new_page()
page.goto("https://example.com") # passes with saved cookies
import { launchPersistentContext } from 'cloakbrowser';
// First run: warm up with --disable-http2
let ctx = await launchPersistentContext({ userDataDir: './profile', args: ['--disable-http2'] });
let page = await ctx.newPage();
await page.goto('https://example.com');
await ctx.close();
// Future runs — no --disable-http2 needed
ctx = await launchPersistentContext({ userDataDir: './profile' });
对于无状态/临时用例, launch(args=["--disable-http2"]) 强制使用 HTTP/1.1,从而绕过检查。仅对需要它的网站使用此标志——大多数网站在 HTTP/2 下都能正常工作。如果你的代理支持 SOCKS5,请使用 proxy="socks5://user:pass@host:port" 代替——SOCKS5 完全绕过 HTTP CONNECT。
某些功能不正常?确保您使用的是最新版本 旧版本可能使用过时的隐身参数或下载旧版二进制文件:
pip install -U cloakbrowser # Python
npm install cloakbrowser@latest # JavaScript
docker pull cloakhq/cloakbrowser:latest # Docker
预览发布频道 browser = launch(license_key="cb_xxxxxxxx", release_channel="preview")
const browser = await launch({ licenseKey: 'cb_xxxxxxxx', releaseChannel: 'preview' });
await using var browser = await CloakLauncher.LaunchAsync(new LaunchOptions
{
LicenseKey = "cb_xxxxxxxx",
ReleaseChannel = "preview",
});
export CLOAKBROWSER_RELEASE_CHANNEL=preview
预览版的可用性因平台而异。预览版始终选择您平台上可用的最新构建:如果存在较新的预览版,则选择它,否则选择稳定版(包括稳定版更新的情况)。 cloakbrowser info 会在发生这种情况时显示 Preview → Stable fallback 。精确版本固定会覆盖发布频道。
新更新导致问题?回滚 固定二进制文件 (保留当前包装器,仅使用较旧的 Chromium)——适用于免费版和专业版:
# Free — pin a public release
browser = launch(browser_version="146.0.7680.177.5")
# Pro — pin a previous Pro version
browser = launch(license_key="cb_xxxxxxxx", browser_version="148.0.7778.215.2")
export CLOAKBROWSER_VERSION=146.0.7680.177.5 # env var for all launches
// Free — pin a public release
const browser = await launch({ browserVersion: '146.0.7680.177.5' });
固定不是永久的——未固定的启动始终使用最新的可用版本。
或者降级包装器 (每个包装器版本都硬编码了它下载的二进制版本):
pip install cloakbrowser==0.3.21 # Python
npm install cloakbrowser@0.3.21 # JavaScript
docker pull cloakhq/cloakbrowser:0.3.21 # Docker
export CLOAKBROWSER_BINARY_PATH=/path/to/your/chrome
macOS:“应用程序已损坏”或 Gatekeeper 阻止启动 二进制文件是临时签名的。macOS 会隔离下载的文件。运行一次以清除:
xattr -cr ~/.cloakbrowser/chromium-*/Chromium.app
“playwright install” 与 CloakBrowser 二进制文件 您不需要 playwright install chromium。CloakBrowser 会下载自己的二进制文件。您只需要 Playwright 的系统依赖项:
playwright install-deps chromium
网站检测到隐身/私密浏览模式 默认情况下, launch() 会打开隐身上下文。某些网站会对此进行惩罚。使用 launch_persistent_context() 获取具有 cookie 持久性的真实配置文件:
from cloakbrowser import launch_persistent_context
ctx = launch_persistent_context("./my-profile", headless=False)
如果网站仍然标记隐身模式,请提高存储配额以显示为常规浏览会话。有关这如何影响不同检测服务的详细信息,请参见 存储配额权衡 。
reCAPTCHA v3 分数较低(0.1–0.3) 避免使用 page.wait_for_timeout() — 它会发送 reCAPTCHA 可检测到的 CDP 协议命令。改用原生睡眠:
# Bad — sends CDP commands, reCAPTCHA detects this
page.wait_for_timeout(3000)
# Good — invisible to the browser
import time
time.sleep(3)
// Bad — sends CDP commands
await page.waitForTimeout(3000);
// Good — invisible to the browser
await new Promise(r => setTimeout(r, 3000));
使用 Playwright,而不是 Puppeteer — Puppeteer 发送更多 reCAPTCHA 可检测到的 CDP 协议流量(详情 )
使用住宅代理 — 数据中心 IP 会被 IP 信誉标记,而不是浏览器指纹
在触发 reCAPTCHA 前在页面上停留 15 秒以上 — 短时间访问得分较低
间隔请求 — 来自同一会话的连续 grecaptcha.execute() 调用会受到惩罚。在带有 reCAPTCHA 的页面之间等待 30 秒以上
使用固定的指纹种子 以在会话间保持一致的设备身份(参见 指纹管理 )
使用 page.type() 而不是 page.fill() 进行表单填写 — fill() 直接设置值而不触发键盘事件,reCAPTCHA 的行为分析会标记这一点。 type() 带延迟模拟真实的按键输入:
page.type("#email", "user@example.com", delay=50)
尽量减少 page.evaluate() 调用 在 reCAPTCHA 检查触发之前 — 每次调用都会发送 CDP 流量
常见问题解答 问:这合法吗?
答:CloakBrowser 是一个基于开源 Chromium 构建的浏览器。我们不纵容非法使用。未经授权自动化系统、撞库和创建账户滥用是明确禁止的。完整条款请参见 BINARY-LICENSE.md 。
问:免费版本需要许可证密钥吗?
答:对于最新版本,通过 GitHub 登录获取的免费密钥(cloakbrowser login,或 cloakbrowser.dev/free ) 可提供一个并发会话,付费密钥可提高限制。较旧的 v146 版本无需密钥即可运行。
问:这与 Camoufox 有何不同?
答:Camoufox 修补的是 Firefox。我们修补的是 Chromium。Chromium 意味着原生支持 Playwright、更大的生态系统,以及与真实 Chrome 匹配的 TLS 指纹。Camoufox 在 2026 年初回归,但处于不稳定的测试阶段——CloakBrowser 已可投入生产。
问:检测网站最终会识破这一点吗?
答:有可能。机器人检测是一场军备竞赛。源码级补丁比配置级补丁更难检测,但并非不可能。我们会积极监控,并在检测手段演变时进行更新。
问:我可以使用自己的代理吗?
答:可以。将 proxy="http://user:pass@host:port" 或 proxy="socks5://user:pass@host:port" 传递给 launch()。原生支持 HTTP 和 SOCKS5 代理。
链接
安全 该包装器会在解压前自动根据已发布的校验和上固定的 Ed25519 签名验证每个二进制文件下载——被入侵的镜像无法提供被篡改或降级的二进制文件。发布版本还会额外签名,以便进行手动供应链验证:
# Verify GPG signature (binary release tag)
gpg --keyserver keyserver.ubuntu.com --recv-keys C60C0DDC9D0DE2DD
git verify-tag chromium-v146.0.7680.177.5
# Verify GitHub binary attestation (Sigstore)
gh attestation verify cloakbrowser-linux-x64.tar.gz --repo CloakHQ/cloakbrowser
# Verify Docker image signature (Cosign/Sigstore)
cosign verify \
--certificate-identity-regexp "https://github.com/CloakHQ/CloakBrowser/" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
cloakhq/cloakbrowser:latest
许可证
包装器代码 (本仓库)— MIT。参见 LICENSE .
CloakBrowser 二进制文件 (编译后的 Chromium):
贡献
贡献者
Star 历史 09.08