📌 项目地址jo-inc/camofox-browser | ⭐ 9,503 颗星 | 🔧 JavaScript | 📜 未标注

问题在哪

Agent 要访问真实网页,路由基本都走不通。Playwright 被拦,Headless Chrome 被指纹识别,stealth 插件自己反而成了新的指纹特征——检测方已经学会识别那些伪装层了。

camofox-browser 的底层是 Camoufox,一个 Firefox 分支。它在 C++ 实现层修改 navigator.hardwareConcurrency、WebGL 渲染器、AudioContext、屏幕几何参数、WebRTC。伪装在 JavaScript 执行之前就完成了,没有 shim,没有 wrapper,也就没有可被检测的痕迹。README 的说法是:能绕过 Google、Cloudflare 和大多数 bot 检测。

项目本身是对这个引擎的一层 REST API 封装,服务的对象是 Agent,不是写爬虫脚本的人。

跑起来

git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser
npm install && npm start
# -> http://localhost:9377

启动后 /docs 有交互式文档,/openapi.json 是自动生成的 OpenAPI 规范。

真正值钱的设计

我觉得这个项目对 Agent 开发者最有用的地方有两个,一个省 token,一个解决登录。

省 token。 它返回给 LLM 的不是原始 HTML,而是 accessibility snapshot(无障碍树快照),体积比原始 HTML 小约 90%。按 token 计费的模型,这一项直接决定跑一个页面的成本。配套的元素引用机制给页面元素分配稳定的 e1e2e3 标识符,Agent 点击、填表时直接引用编号,不会因为 HTML 结构变化而失效。大页面还有自动截断加 offset 分页,不会撑爆上下文窗口。

解决登录。 反检测过了,登录时的验证码还是拦路虎。项目提供了 VNC 交互式登录:通过 noVNC 在浏览器里人工登录一次,然后导出 storage state 给 Agent 复用。也支持直接导入 Netscape 格式的 cookie 文件进入已登录状态。两条路都通。

其他能力列一下:

  • 搜索宏:@google_search@youtube_search@amazon_search@reddit_subreddit 等 15 个左右常见站点
  • 结构化提取:POST /tabs/:tabId/extract 接受 JSON Schema,返回符合 schema 的数据
  • YouTube 字幕:通过 yt-dlp 抓取,不需要 API key
  • 代理 + GeoIP:走住宅代理时自动匹配对应的 locale 和时区
  • Session 隔离:每个用户独立的 cookies 和 storage
  • 文件上传(从配置目录取文件,不弹系统对话框)、下载捕获、DOM 图片提取、快照附带 base64 截图

部署成本

浏览器懒启动,空闲自动关闭,空闲时内存约 40MB。这个数字意味着它可以和你的其他服务共享一台机器——README 提到的部署环境包括树莓派、5 美元的 VPS。Docker、Fly.io、Railway 都支持。

日志是 JSON 格式,每行带请求 ID,生产环境排查问题够用。

和 Playwright 方案的区别

维度 Playwright + stealth 插件 camofox-browser
指纹伪装层级 JS 层注入,可被检测 C++ 层,JS 执行前完成
返回给 LLM 的内容 原始 HTML accessibility snapshot,小约 90%
元素定位 CSS 选择器,易碎 稳定的 e1/e2/e3 引用
定位 通用浏览器自动化 Agent 服务化

如果你只是写传统爬虫,Playwright 顺手。但消费方是 LLM 时,快照、元素引用、extract schema 这套 API 设计明显更贴合。

两个提醒

一是合规。绕过 Cloudflare 这类防护属于反爬博弈的灰色地带,用之前看清楚目标站点的服务条款和当地法律。

二是项目背景。它是 jo 团队的产品衍生——jo 是一个个人 AI Agent,一半跑在用户的 Mac 上,一半跑在专属云机器上。这个浏览器服务是他们自用需求抽出来的,工程上的取舍(低内存、token 效率、登录流程)都来自真实 Agent 场景,不是拍脑袋加的功能。

这篇文章对你有帮助吗?

发表回复