背景
AI Agent 要想真正「上网」,浏览器自动化是绕不开的环节。但市面上的主流方案各有缺点:
- Headless Chrome / CDP —— 早就被 bot 检测厂商标记殆尽。
navigator.webdriver、JA3 指纹、CDP 泄漏等信号一碰就封,429 和 WAF 挑战页接踵而至。 - Browserbase —— 注册必须绑手机号,且不接受中国大陆号码,第一道门槛就把人挡在外面。
- Browser Use —— 月费 $40 到 $100 不等,只想试试水的开发者得先交一笔不小的学费。
- Firecrawl —— 擅长抓取页面和结构化提取,但点击、输入、滚动这类交互操作不是它的主场。
于是问题来了:有没有一种本地即可运行、无需订阅、又能过得去现代反 bot 检测的方案?
核心内容
一、Headless Chrome 为何总吃 429
Chrome 的落败不是哪个单一漏洞,而是整套信号叠在一起被识别了:
-
navigator.webdriver强制暴露
W3C WebDriver 规范要求自动化浏览器必须设置navigator.webdriver = true,简直是主动亮身份。[1] -
JavaScript 环境不对劲
Headless Chromium 在plugins、permissions、屏幕与视口对齐等细节上和真实浏览器有微妙差异,可被模板攻击精准识别。[2][3] -
Stealth 插件的悖论
puppeteer-extra-plugin-stealth虽能补一些漏洞,但每次注入的补丁顺序和内容都一模一样,反 bot 系统已经把「这套补丁本身」当成了指纹。[4] -
TLS / JA3 指纹锁定
Chromium 用的是 BoringSSL,其 JA3 哈希在数据中心 IP 的加持下很容易被标记为自动化流量。[5] -
CDP 运行时泄漏
远程调试端口 9222 的存在、以及chrome-extension://探针,都会让网页嗅出「这浏览器被远程控制了」。这些检测方法在实际项目中已被多个 bot 防御商业化应用。
一句话:没有修补的 Chromium 自动化,在现代 Web 面前几乎是透明的。
二、Camoufox 为何难被识别
Camofox 不是在 Chrome 外面套一层 JavaScript shim,而是直接对 Firefox Gecko 引擎做 C++ 级修补:
navigator.webdriver的移除发生在Navigator.cpp原生代码层,JavaScript 看不到任何重写痕迹。hardwareConcurrency、WebGL vendor/renderer、AudioContext采样率、屏幕几何信息、WebRTC 硬件枚举等,都从引擎内部直接 spoof。- 网络栈沿用 Mozilla NSS,TLS 指纹与成千上万普通 Firefox 用户没有区别。
- Playwright 只负责「启动」这个被修补过的 Firefox 二进制文件,而不是调用它自带的 Chromium。
所以页面看到的,不是一个「被抹去自动化标记的浏览器」,而是一个指纹与真实用户难以区分的 Firefox 实体。[7]
三、本地免费,交互无阻
Camofox 以 REST API 形式跑在本地(默认 http://localhost:9377)。对于 Hermes Agent 用户来说,这是透明的:只要启用了 browser 工具集,browser_navigate、browser_click、browser_type 等操作会自动走这个本地端点,无需手写任何 curl 封装。
除了底层的反检测能力,它还提供了 Agent 友好的功能:
- Accessibility Snapshot —— 返回带稳定元素引用(
e1,e2…)的页面结构,体积比原始 HTML 小约 90%。 - 点击与输入 —— 通过元素引用直接操作,不用手写脆弱的 CSS selector。
- 搜索宏 ——
@google_search、@youtube_search等快捷导航。 - 会话隔离 —— 按
userId/sessionKey分离 Cookie 与 Storage,避免状态串扰。
最重要的是,它完全免费。一条 npm install && npm start 就能跑起来。
实践验证
近日对 Camofox 进行了三项实测,结果如下:
| 测试项 | 结果 | 说明 |
|---|---|---|
| Hacker News 首页抓取 | ✅ 通过 | 成功提取 Top 10 帖子标题、分数、评论数 |
| Aeon 长文阅读 | ✅ 通过 | 复杂 DOM 与订阅弹窗未造成阻塞,完整获取文章元数据 |
| 图片 CDN 批量下载(10 张) | ✅ 通过 | snapshot 直接暴露 CDN 链接,curl 秒级下载完成 |
对比之下,此前用 Headless Chrome 和远程 CDP 连接同一批站点时,几乎全是 429。Camofox 在零额外配置的情况下直接通过,差异很明显。
运维贴士:macOS 开机自启
对于 Hermes Agent 用户来说,最好让 Camofox 随系统启动而运行,省得每次手动开终端。macOS 下可通过 LaunchAgent 实现:
<!-- ~/Library/LaunchAgents/ai.hermes.camofox.plist -->
<!-- 请将 /Users/mac/camofox-browser 替换为你的实际路径 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ...>
<plist version="1.0">
<dict>
<key>Label</key>
<string>ai.hermes.camofox</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/node</string>
<string>/Users/mac/camofox-browser/server.js</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/mac/camofox-browser</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
加载命令:
launchctl load ~/Library/LaunchAgents/ai.hermes.camofox.plist
日常可配几个 Fish alias 以便查看状态:
alias camofox-status 'lsof -i tcp:9377 2>/dev/null && echo "running" || echo "stopped"'
alias camofox-logs 'tail -f ~/.hermes/logs/camofox.log'
alias camofox-restart 'launchctl unload ~/Library/LaunchAgents/ai.hermes.camofox.plist; sleep 1; launchctl load ~/Library/LaunchAgents/ai.hermes.camofox.plist'
总结
关键要点:
- Headless Chrome 的检测面太广,WAF 与 bot 防御系统已能轻易识别其自动化信号。
- Browserbase、Browser Use、Firecrawl 等云方案虽强,但或受注册限制、或价格不菲、或场景不符。
- Camoufox 以 C++ 级 Firefox 补丁实现了低检测率的自动化浏览,本地零成本即可运行。
- 配合 LaunchAgent 可实现 macOS 开机自启,让 Hermes Agent 随时拥有可靠的浏览器能力。
适用场景:
- 需要频繁进行交互式网页操作的本地 Agent 工作流
- 对订阅成本敏感、或无法注册海外云服务的开发者
- 需要绕过中等强度反 bot 检测(Cloudflare、Fortuna 等)的自动化任务
不适用场景:
- 需要大规模分布式并发、或企业级 SLA 保障的生产环境(仍需评估云浏览器)
- 目标站点采用高级行为生物识别(鼠标轨迹、按键动力学分析)的场景
参考
- W3C WebDriver Specification — Navigator WebDriver Attribute. https://w3c.github.io/webdriver/#navigator-webdriver-attribute
- Vastel, A. "Detecting Chrome Headless / new techniques." 2018. https://antoinevastel.com/bot%20detection/2018/01/17/detect-chrome-headless-v2.html
- Schwarz et al. "JavaScript Template Attacks." USENIX Security 2019. https://www.usenix.org/conference/usenixsecurity19/presentation/schwarz
- camofox-browser README — "Stealth plugins become the fingerprint." https://github.com/jo-inc/camofox-browser
- Althouse et al. "TLS Fingerprinting with JA3 and JARM." Salesforce Engineering. https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-jarm/
- 实际项目中的 CDP 探针与远程调试端口检测实践。
- Camoufox Official Documentation. https://camoufox.com