活着就要学习,学习不是为了活着。——弗培根

https://github.com/CloakHQ/CloakBrowser

CloakBrowser:一位披着“正常人”外衣的 Chromium,专治各种“你看起来像机器人”

在浏览器自动化的世界里,大多数工具都像穿着统一制服去参加舞会:动作很快、节奏很整齐、还总爱在脸上写着“我在自动化”。反爬和风控系统当然一眼就认出来了:请去做题、请点格子、请证明你是人。

CloakBrowser 更像一位真正来参加舞会的绅士——他不是靠化妆、不是靠贴假胡子、也不是靠临时换衣服蒙混过关;他是从骨子里就长成了“真实浏览器”的样子。

Stealth Chromium that passes every bot detection test.
这句是 CloakBrowser 的自我介绍:它是一套“隐身”的 Chromium,并且能通过每一个机器人检测测试。
它还是一个 Playwright 的即插即用替代品同样的 API,同样的代码,只要换个 import。
仿佛你只是给 Playwright 换了一副更像人的灵魂。


它到底是谁?(严格按它自己的介绍来)

CloakBrowser 不是“改几个启动参数”的那种聪明,也不是“往页面里注入一段 JS”那种投机。

它更像个动手能力极强的外科医生:
把 Chromium 的“指纹表现”直接在 C++ 源码层做了修改,然后重新编译成一个 真正的 Chromium 二进制

它会很认真地说:

  • 这不是 patched config
  • 这不是 JS injection
  • 这是 real Chromium binary with fingerprints modified at the C++ source level

所以反机器人系统给它打分时,会觉得它像普通浏览器——因为它 就是 普通浏览器那种“真实”。


它的性格标签:不止“像”,还要“像得自然”

CloakBrowser 有两张王牌,一张负责“长相”,一张负责“举止”。

1)长相:源代码级指纹补丁

它身上带着一串“出生证明式”的改造记录:

  • 49(后来版本提到 57)个源代码级 C++ patches(覆盖 canvas、WebGL、audio、fonts、GPU、screen、WebRTC、network timing、automation signals、CDP input behavior 等)
  • 自动化信号会被处理得更干净:比如 navigator.webdriver 会变得更像真实浏览器
  • TLS 指纹会表现得像真实 Chrome(ja3n/ja4/akamai match 的语义在 README 中被强调)

这些改造不是贴纸,是“骨架调整”。所以它不怕常见的“Chrome 一更新, stealth 插件就坏”的宿命。

2)举止:humanize=True

如果说指纹补丁让它“看起来像人”,那 humanize=True 则让它“行动像人”。

它会用更像人类的方式去做鼠标、键盘、滚动:

  • 鼠标走 曲线(Bézier curve),带一点点缓冲与微小偏移
  • 打字是 逐字符、带停顿、甚至会“想一想”
  • 滚动像真实手势:加速 → 匀速 → 减速,带微步

一行参数,它就能把行为学检测也一并照顾到。


你和它相遇的方式:3 行代码,30 秒“解封”

它很骄傲地把门槛放得极低:
Same API, same code — just swap the import. 3 lines of code, 30 seconds to unblock.

你不需要学习新框架,它只需要你给它一个入口。


先来一次“试试就知道”的快速体验(Docker 一句命令)

如果你只想看看它到底有多会“装正常”,它直接给你一条即刻上手的路:

1
docker run --rm cloakhq/cloakbrowser cloaktest

它像在说:
“别说那么多,来,跑一下,看我怎么过检测。”


安装:它不挑语言,但很讲究“第一次见面”的仪式感

Python 安装

1
pip install cloakbrowser

第一次运行时,它会自动下载对应平台的 stealth Chromium 二进制(约 200MB,并缓存到本地)。
你甚至不需要手动去找浏览器路径——它自己会把行李拎到你家门口。

可选:根据代理 IP 自动匹配 timezone/locale

1
pip install cloakbrowser[geoip]

JavaScript / Node.js 安装

如果你使用 Playwright:

1
npm install cloakbrowser playwright-core

如果你使用 Puppeteer:

1
npm install cloakbrowser puppeteer-core

同样:第一次启动会自动下载二进制并缓存到 ~/.cloakbrowser/


Python:它用 Playwright 的手法做事,但更不容易被拦

最基础的 3 行体验

1
2
3
4
5
6
from cloakbrowser import launch

browser = launch()
page = browser.new_page()
page.goto("https://protected-site.com") # no more blocks
browser.close()

它的语气像在轻描淡写:
“嗯?你说被拦?我路过一下就行了。”


带上代理(HTTP / SOCKS5 都行)

1
2
3
4
from cloakbrowser import launch

browser = launch(proxy="http://user:pass@proxy:8080")
browser.close()
1
2
3
4
from cloakbrowser import launch

browser = launch(proxy="socks5://user:pass@proxy:1080")
browser.close()

一键“更像人”:humanize=True

1
2
3
4
5
6
7
8
from cloakbrowser import launch

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
browser.close()

如果你想让它更谨慎、更慢一点,它还有“性格预设”:

1
2
3
4
from cloakbrowser import launch

browser = launch(humanize=True, human_preset="careful")
browser.close()

Python:不只 launch,还能把“上下��”和“持久化身份”一起安排好

launch_async():异步也能稳稳当当

1
2
3
4
5
6
7
8
9
10
11
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():浏览器 + context 一次到位

1
2
3
4
5
6
7
8
9
10
11
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()

它还会把额外参数转交给 Playwright 的 browser.new_context(),比如 storage_state

1
2
3
4
5
6
7
from cloakbrowser import launch_context

context = launch_context(storage_state="state.json")
page = context.new_page()
page.goto("https://example.com")
context.storage_state(path="state.json")
context.close()

launch_persistent_context():让它“有记忆”,不再像每次重生

持久化 profile 能帮你:

  • 跨运行保持登录态(cookies/sessions)
  • 绕开一些站点对 incognito 的敏感
  • 使用扩展
  • 积累更自然的浏览痕迹(缓存、IndexedDB、service worker…)
1
2
3
4
5
6
7
8
9
10
from cloakbrowser import launch_persistent_context

ctx = launch_persistent_context("./my-profile", headless=False)
page = ctx.new_page()
page.goto("https://protected-site.com")
ctx.close()

# 下次再来,记忆还在
ctx = launch_persistent_context("./my-profile", headless=False)
ctx.close()

CLI:它也愿意在命令行里自报家门、整理行李

你可以在命令行让它提前把二进制准备好,或者查看状态:

1
2
3
4
python -m cloakbrowser install      # Download binary with progress output
python -m cloakbrowser info # Show version, path, platform
python -m cloakbrowser update # Check for and download newer binary
python -m cloakbrowser clear-cache # Remove cached binaries

它像个会自我维护的旅行者:
“我会检查更新、会清理缓存、也会告诉你我住在哪里。”


JavaScript / Node.js:同样的“换个 import”,同样的熟悉感

CloakBrowser 提供 TypeScript 包和类型定义。你可以选 Playwright 或 Puppeteer,本质上都在用同一套 stealth Chromium。

Playwright(默认推荐)

1
2
3
4
5
6
7
import { launch } from 'cloakbrowser';

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

带参数也很自然:

1
2
3
4
5
6
7
8
9
10
11
import { launch } from 'cloakbrowser';

const browser = await launch({
headless: false,
proxy: 'http://user:pass@proxy:8080',
args: ['--fingerprint=12345'],
timezone: 'America/New_York',
locale: 'en-US',
humanize: true,
});
await browser.close();

Puppeteer(它也支持,但会认真提醒你局限)

1
2
3
4
5
6
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();

README 里明确说了:
在某些场景(例如 reCAPTCHA Enterprise),Playwright wrapper 更推荐,因为 Puppeteer 的 CDP 协议可能泄漏自动化信号。


Node.js 的 CLI 同样齐全

1
2
3
4
npx cloakbrowser install      # Download binary with progress output
npx cloakbrowser info # Show version, path, platform
npx cloakbrowser update # Check for and download newer binary
npx cloakbrowser clear-cache # Remove cached binaries

让“身份”更像一个连续的人:指纹种子(seed)的哲学

CloakBrowser 默认会在启动时自动生成随机 fingerprint seed:
这意味着每次启动都像“换了一个新设备”。

它会温柔地提醒你一个现实:
如果你要反复访问同一个站点,每次都像新设备反而有点怪。

所以它给你一把“固定身份”的钥匙:--fingerprint=seed

1
2
3
4
from cloakbrowser import launch

browser = launch(args=["--fingerprint=12345"])
browser.close()
1
2
3
4
import { launch } from 'cloakbrowser';

const browser = await launch({ args: ['--fingerprint=12345'] });
await browser.close();

Docker:它甚至愿意把整套行头打包好给你

快速测试

1
docker run --rm cloakhq/cloakbrowser cloaktest

跑你自己的脚本

1
docker run --rm -v ./my_script.py:/app/my_script.py cloakhq/cloakbrowser python my_script.py

CDP server mode:把它当成一个“常驻的隐身浏览器服务”

启动:

1
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser cloakserve

连接(Playwright 通过 CDP):

1
2
3
4
5
6
7
8
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()

它像在说:
“我可以常驻,你只要来连我就好。”


它为什么要存在?(它对“伪装”这件事有点较真)

README 的态度很明确:

  • 只靠 config 或 JS 注入的 stealth 工具经常会被 Chrome 更新击穿
  • CloakBrowser 选择从 Chromium 源码层修改指纹,编译进二进制
  • 让检测站点看到的不是“伪装痕迹”,而是一台“真实的浏览器”

它不承诺“我能解 CAPTCHA”,它更像在说:
“我更希望你压根别被拉去做 CAPTCHA。”


它拿什么成绩单说话:测试结果(README 原意复述)

它把测试当作公开的“社会面试”。
在 README 里,它列出了多个检测服务对比,并强调:

  • reCAPTCHA v3:Stock Playwright 0.1(bot)→ CloakBrowser 0.9(human)
  • Cloudflare Turnstile:PASS
  • FingerprintJS / BrowserScan 等:PASS / NORMAL
  • navigator.webdriver:能变得更像真实环境
  • CDP detection:Not detected
  • TLS fingerprint:Identical to Chrome
  • 并且:Tested against 30+ detection sites

它很像那种把体检报告摊在桌上的人:
“你看,我没说我像人,我是拿指标证明我像人。”


Browser Profile Manager:它还有一个“分身管理中心”

如果你需要管理多套浏览器资料(fingerprints、proxies、持久会话),README 里还提到一个自托管的方案:

  • Self-hosted alternative to Multilogin, GoLogin, AdsPower
  • 通过 Web 界面创建 profile、点击 Launch

启动方式:

1
docker run -p 8080:8080 -v cloakprofiles:/data cloakhq/cloakbrowser-manager

然后打开:

并且它指向:


小结:它像一个不爱吵闹、只想“像个正常人”的浏览器

CloakBrowser 的核心气质很统一:

  • 源代码级方式解决指纹问题,而不是临时贴补丁
  • 让你用熟悉的 Playwright/Puppeteer API,不需要重学
  • 能用 humanize=True 把“行为”也打磨得更真实
  • 安装后自动下载、自动更新二进制,尽量做到零配置
  • Docker、CLI、CDP server mode 都准备好了,适配从本地到部署的各种场景

如果你曾经被“你看起来像机器人”这句话拦在门外,
CloakBrowser 更像一位会轻轻拍你肩膀的同伴:

“别急,我来。你只要照常写代码——剩下的我来表现得更像人。”