Camofox Browser
面向智能体的反检测浏览器 REST 服务,提供可引用的页面操作与会话隔离。
按维度查看评分与理由
证据显示:API密钥用于cookie导入,但其他端点未强制认证;cookie导入默认禁用,需显式设置密钥;数据流透明性较好,有日志和遥测说明;敏感数据处理有匿名化措施;依赖有安全审计(CI中npm audit);外部影响包括自动创建GitHub Issue,但可禁用;无回滚机制;来源归属有作者和仓库信息。扣分:权限最小化不足(API密钥仅保护部分端点),用户确认缺失(自动遥测默认开启),回滚缺失,来源归属仅基于自述。
证据显示:自述与package.json一致,功能描述与代码结构相符;依赖版本固定(camoufox-js 0.11.5),但未提供依赖可用性保证;失败消息有结构化错误码(如navigation_race)。扣分:依赖可用性未验证,失败消息覆盖不全。
证据显示:明确面向AI代理,提供多种部署方式(Docker、Fly.io、Railway);能力边界清晰(列出功能列表);触发精度高(API端点明确);环境适配好(支持多种平台)。扣分:无重大缺陷,但未提供详细场景示例。
证据显示:信息架构清晰(README有目录);安装说明详细(npm、Docker、源码);命名稳定(版本号明确);有示例和FAQ(README中有使用示例);已知限制提及较少;MIT许可证明确;版本号存在但无changelog;维护责任有作者信息但未明确。扣分:已知限制不足,无changelog,维护责任不明确。
证据显示:输出可用性高(提供API和插件);边际价值高(解决反检测需求);成本效益合理(轻量级)。扣分:无重大缺陷,但未提供性能基准。
证据显示:部分声明可追溯(如遥测端点可验证);跨来源佐证有限(仅自述);事实与推断分离不明确。扣分:缺乏独立验证,声明多为自述。
- API密钥仅保护cookie导入端点,其他端点可能未认证,存在未授权访问风险。
- 遥测默认开启,自动创建GitHub Issue,可能泄露匿名化后的站点信息,需确认隐私政策。
- 依赖camoufox-js和playwright-core,需关注其安全更新。
这个 Agent 能做什么,适合哪些场景?
Camofox Browser 是一个运行在 Node.js 上的自托管浏览器服务器,以 Camoufox 的 Firefox 引擎为基础,并通过 REST API 供自动化客户端调用。它把页面转为带 e1、e2 等稳定元素引用的无障碍快照,而非直接返回大量 HTML,并提供点击、输入、导航、滚动、截图与下载读取等接口。每位用户使用独立 BrowserContext,项目可持久化 cookies 和 localStorage,并可按 sessionKey 组织标签页。服务按需启动浏览器、在空闲时关闭,支持 Docker、Railway 和 Fly.io 等部署路径。它还包含代理与 GeoIP 配置、Netscape 格式 Cookie 导入、可选 VNC 登录、会话 Trace、YouTube 字幕提取及匿名化故障遥测。
客户端通过 POST /tabs 创建带 userId、sessionKey 和 URL 的标签页;服务启动 Camoufox,并在该用户的 BrowserContext 中打开页面。随后可调用 GET /tabs/:id/snapshot 获取带元素 ref 的无障碍快照,可选 includeScreenshot=true 返回 base64 PNG;POST /tabs/:id/click、/type、/press、/scroll、/navigate 分别执行交互,navigate 可使用 @google_search、@reddit_search 等宏。GET /tabs/:id/links、/images、/downloads 和 /screenshot 分别提取链接、img 信息、已捕获下载和截图;POST /tabs/:tabId/extract 支持以 JSON Schema 和 x-ref 做结构化提取。它可通过 POST /sessions/:userId/cookies 注入 Playwright cookie 对象,使用 GET /sessions/:userId/storage_state 导出存储状态,并在首个标签创建时传入 trace:true 来生成 Playwright trace zip。POST /youtube/transcript 优先调用 yt-dlp 提取字幕,缺少 yt-dlp 时回退到浏览器拦截方式。
- 正在构建网页研究助手的开发者,需要让后端服务创建标签页、读取无障碍快照,并按 e1 这类引用完成点击和输入。
- 运行多用户自动化任务的团队,需要让不同 userId 的 cookies、localStorage 和标签页互相隔离,并在重启后恢复会话。
- 需要通过住宅代理访问地区相关网页的采集系统,可配置 PROXY_HOST 或 backconnect 代理,并让 Camoufox 根据出口 IP 设置语言、时区和地理位置。
- 需要复用人工登录状态的运营人员,可先通过 VNC 完成站点登录,或导入 Netscape 格式 cookie 文件供后续会话使用。
- 需要排查浏览器任务失败的工程团队,可对指定会话开启 Playwright trace,并通过 trace zip 查看截图、DOM 快照、网络请求和控制台输出。
- 需要获得 YouTube 视频字幕的自动化流程,可向 /youtube/transcript 提交视频 URL,并在本机安装 yt-dlp 以走更快的提取路径。
这个 Agent 有哪些优点和局限?
- 以 Camoufox 为底层引擎;项目说明其指纹修改发生在 Firefox 的 C++ 实现层,而不是依赖 JavaScript shim 或 stealth wrapper。
- 无障碍快照配合稳定元素 ref,适合以 API 驱动的浏览器循环;快照还支持分页和可选截图。
- 会话以 BrowserContext 隔离,支持 Cookie 导入、持久化存储状态、每会话 Trace,以及按 sessionKey 分组标签页。
- 部署选择较完整:可从 npm 或源码启动,也提供 Docker、Railway、Fly.io 与 Windows PowerShell 流程。
- 代理配置可配合 Camoufox GeoIP,使 locale、timezone 和 geolocation 与代理出口匹配。
- 首次安装需要下载约 300MB 的 Camoufox;使用外部二进制时必须提供包含 properties.json、version.json 与 fontconfig 的 Camoufox bundle。
- Cookie 导入默认关闭,必须设置 CAMOFOX_API_KEY;若服务对外暴露,项目建议额外配置 CAMOFOX_ACCESS_KEY。
- YouTube 字幕的快速路径依赖额外安装 yt-dlp;未安装时会使用较慢且较不可靠的浏览器回退方案。
- 会话和标签页存在默认上限与超时,例如 MAX_SESSIONS 默认为 50、MAX_TABS_PER_SESSION 默认为 10、会话空闲 30 分钟后过期。
- 默认开启匿名化崩溃与卡顿遥测;不需要时必须显式设置 CAMOFOX_CRASH_REPORT_ENABLED=false。
如何安装或部署这个 Agent?
独立运行:
git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser
npm install
npm start服务默认监听 http://localhost:9377;首次运行会下载约 300MB 的 Camoufox。也可直接运行:
npx @askjo/camofox-browserDocker 部署请使用项目提供的流程:
make up如需导入 Cookie,先生成并设置密钥:
export CAMOFOX_API_KEY="your-generated-key"
npm start如需更快的 YouTube 字幕提取,在本地额外安装:
pip install yt-dlp如何使用这个 Agent?
创建第一个标签页:
curl -X POST http://localhost:9377/tabs \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","sessionKey":"task1","url":"https://example.com"}'使用响应中的 TAB_ID 获取快照:
curl "http://localhost:9377/tabs/TAB_ID/snapshot?userId=agent1"按快照中的元素引用点击:
curl -X POST http://localhost:9377/tabs/TAB_ID/click \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","ref":"e1"}'若将服务暴露到非本地网络,可设置 CAMOFOX_ACCESS_KEY,并在请求中发送 Authorization: Bearer <key>。
这个 Agent 与同类方案有什么区别?
项目将自身定位为 Playwright/Puppeteer 的替代式浏览器服务:Playwright 或 headless Chrome 的常规使用可能被指纹识别,而该服务改用 Camoufox 的 Firefox 引擎,并通过 REST API、无障碍快照和元素 ref 暴露自动化能力。它不是 Playwright 的普通库内替换,而是需要调用其 HTTP 接口的独立服务器。