Skip to content

浏览器自动化

浏览器自动化

Hermes Agent 包含一套完整的浏览器自动化工具集,具有多个后端选项:

  • Browserbase 云模式 通过 Browserbase 提供托管云浏览器和反机器人工具
  • Browser Use 云模式 通过 Browser Use 作为替代的云浏览器提供商
  • Firecrawl 云模式 通过 Firecrawl 提供具有内置抓取功能的云浏览器
  • Camofox 本地模式 通过 Camofox 提供本地反检测浏览(基于 Firefox 的指纹欺骗)
  • 通过 CDP 使用本地 Chrome — 使用 /browser connect 将浏览器工具连接到您自己的 Chrome 实例
  • 本地浏览器模式 通过 agent-browser CLI 和本地 Chromium 安装

在所有模式下,Agent 都可以导航网站、与页面元素交互、填写表单和提取信息。

概述

页面以可访问性树(基于文本的快照)表示,非常适合 LLM Agent。交互元素获得引用 ID(如 @e1@e2),Agent 使用这些 ID 进行点击和输入。

主要功能:

  • 多云提供商执行 — Browserbase、Browser Use 或 Firecrawl — 无需本地浏览器
  • 本地 Chrome 集成 — 通过 CDP 连接到您正在运行的 Chrome,进行手动浏览
  • 内置隐身 — 随机指纹、CAPTCHA 解决、住宅代理(Browserbase)
  • 会话隔离 — 每个任务获得自己的浏览器会话
  • 自动清理 — 不活动的会话在超时后关闭
  • 视觉分析 — 截图 + AI 分析用于视觉理解

设置

Browserbase 云模式

要使用 Browserbase 托管的云浏览器,请添加:

bash
# 添加到 ~/.hermes/.env
BROWSERBASE_API_KEY=***
BROWSERBASE_PROJECT_ID=your-project-id-here

browserbase.com 获取您的凭证。

Browser Use 云模式

要将 Browser Use 用作您的云浏览器提供商,请添加:

bash
# 添加到 ~/.hermes/.env
BROWSER_USE_API_KEY=***

browser-use.com 获取您的 API 密钥。Browser Use 通过其 REST API 提供云浏览器。如果同时设置了 Browserbase 和 Browser Use 凭证,Browserbase 优先。

Firecrawl 云模式

要将 Firecrawl 用作您的云浏览器提供商,请添加:

bash
# 添加到 ~/.hermes/.env
FIRECRAWL_API_KEY=fc-***

firecrawl.dev 获取您的 API 密钥。然后选择 Firecrawl 作为您的浏览器提供商:

bash
hermes setup tools
# → 浏览器自动化 → Firecrawl

可选设置:

bash
# 自托管 Firecrawl 实例(默认:https://api.firecrawl.dev)
FIRECRAWL_API_URL=http://localhost:3002

# 会话 TTL(秒)(默认:300)
FIRECRAWL_BROWSER_TTL=600

Camofox 本地模式

Camofox 是一个自托管的 Node.js 服务器,包装了 Camoufox(一个带有 C++ 指纹欺骗功能的 Firefox 分支)。它提供本地反检测浏览,无需依赖云。

bash
# 安装并运行
git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser
npm install && npm start   # 首次运行时下载 Camoufox(约 300MB)

# 或通过 Docker
docker run -d --network host -e CAMOFOX_PORT=9377 jo-inc/camofox-browser

然后在 ~/.hermes/.env 中设置:

bash
CAMOFOX_URL=http://localhost:9377

或通过 hermes tools → 浏览器自动化 → Camofox 进行配置。

当设置了 CAMOFOX_URL 时,所有浏览器工具都会自动通过 Camofox 路由,而不是 Browserbase 或 agent-browser。

持久浏览器会话

默认情况下,每个 Camofox 会话获得一个随机身份 —— Cookie 和登录信息不会在 Agent 重启后保留。要启用持久浏览器会话:

yaml
# 在 ~/.hermes/config.yaml 中
browser:
  camofox:
    managed_persistence: true

启用后,Hermes 向 Camofox 发送一个稳定的配置文件范围内的身份。Camofox 服务器将此身份映射到一个持久的浏览器配置文件目录,因此 Cookie、登录信息和 localStorage 在重启后仍然保留。不同的 Hermes 配置文件获得不同的浏览器配置文件(配置文件隔离)。

NOTE

Camofox 服务器还必须在服务器端配置 CAMOFOX_PROFILE_DIR 才能使持久化工作。

VNC 实时视图

当 Camofox 以有头模式运行(带有可见浏览器窗口)时,它会在其健康检查响应中暴露一个 VNC 端口。Hermes 自动发现这一点,并在导航响应中包含 VNC URL,因此 Agent 可以共享一个链接供您实时观看浏览器。

通过 CDP 使用本地 Chrome (/browser connect)

除了云提供商之外,您还可以通过 Chrome DevTools Protocol (CDP) 将 Hermes 浏览器工具连接到您自己正在运行的 Chrome 实例。当您想实时查看 Agent 正在做什么、与需要您自己 Cookie/会话的页面交互,或避免云浏览器成本时,这非常有用。

在 CLI 中,使用:

/browser connect              # 连接到 ws://localhost:9222 的 Chrome
/browser connect ws://host:port  # 连接到特定的 CDP 端点
/browser status               # 检查当前连接
/browser disconnect            # 分离并返回到云/本地模式

如果 Chrome 尚未以远程调试模式运行,Hermes 将尝试使用 --remote-debugging-port=9222 自动启动它。

提示

手动启动 Chrome 并启用 CDP:

bash
# Linux
google-chrome --remote-debugging-port=9222

# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222

通过 CDP 连接时,所有浏览器工具(browser_navigatebrowser_click 等)都在您的实时 Chrome 实例上运行,而不是启动云会话。

本地浏览器模式

如果您设置任何云凭证并且不使用 /browser connect,Hermes 仍然可以通过由 agent-browser 驱动的本地 Chromium 安装使用浏览器工具。

可选环境变量

bash
# 用于更好 CAPTCHA 解决的住宅代理(默认:"true")
BROWSERBASE_PROXIES=true

# 使用自定义 Chromium 的高级隐身功能 —— 需要 Scale Plan(默认:"false")
BROWSERBASE_ADVANCED_STEALTH=false

# 断开连接后的会话重新连接 —— 需要付费计划(默认:"true")
BROWSERBASE_KEEP_ALIVE=true

# 自定义会话超时(毫秒)(默认:项目默认值)
# 示例:600000 (10分钟), 1800000 (30分钟)
BROWSERBASE_SESSION_TIMEOUT=600000

# 自动清理前的不活动超时(秒)(默认:120)
BROWSER_INACTIVITY_TIMEOUT=120

安装 agent-browser CLI

bash
npm install -g agent-browser
# 或在仓库中本地安装:
npm install

信息

browser 工具集必须包含在您配置的 toolsets 列表中,或通过 hermes config set toolsets '["hermes-cli", "browser"]' 启用。

可用工具

browser_navigate

导航到一个 URL。必须在任何其他浏览器工具之前调用。初始化 Browserbase 会话。

导航到 https://github.com/NousResearch

提示

对于简单的信息检索,优先使用 web_searchweb_extract —— 它们更快更便宜。当您需要交互页面(点击按钮、填写表单、处理动态内容)时使用浏览器工具。

browser_snapshot

获取当前页面可访问性树的基于文本的快照。返回带有引用 ID(如 @e1@e2)的交互元素,供 browser_clickbrowser_type 使用。

  • full=false(默认):仅显示交互元素的紧凑视图
  • full=true:完整的页面内容

超过 8000 个字符的快照会自动由 LLM 总结。

browser_click

点击由快照中的引用 ID 标识的元素。

点击 @e5 按下 "Sign In" 按钮

browser_type

在输入字段中输入文本。先清除字段,然后输入新文本。

在搜索字段 @e3 中输入 "hermes agent"

browser_scroll

向上或向下滚动页面以显示更多内容。

向下滚动查看更多结果

browser_press

按下键盘键。用于提交表单或导航。

按 Enter 提交表单

支持的键:EnterTabEscapeArrowDownArrowUp 等。

browser_back

导航回浏览器历史中的上一页。

browser_get_images

列出当前页面上所有图片及其 URL 和替代文本。用于查找要分析的图片。

browser_vision

截取屏幕截图并使用视觉 AI 进行分析。当文本快照无法捕获重要视觉信息时使用 —— 特别适用于 CAPTCHA、复杂布局或视觉验证挑战。

屏幕截图被持久保存并返回文件路径以及 AI 分析。在消息平台上(Telegram、Discord、Slack、WhatsApp),您可以要求 Agent 分享屏幕截图 —— 它将通过 MEDIA: 机制作为原生照片附件发送。

这个页面上的图表显示了什么?

屏幕截图存储在 ~/.hermes/cache/screenshots/ 中,并在 24 小时后自动清理。

browser_console

获取浏览器控制台输出(日志/警告/错误消息)和当前页面的未捕获 JavaScript 异常。对于检测未出现在可访问性树中的静默 JS 错误至关重要。

检查浏览器控制台是否有任何 JavaScript 错误

使用 clear=True 在阅读后清除控制台,因此后续调用只显示新消息。

实用示例

填写网页表单

用户:使用我的邮箱 john@example.com 在 example.com 上注册一个账户

Agent 工作流:
1. browser_navigate("https://example.com/signup")
2. browser_snapshot()  → 看到带有引用的表单字段
3. browser_type(ref="@e3", text="john@example.com")
4. browser_type(ref="@e5", text="SecurePass123")
5. browser_click(ref="@e8")  → 点击 "Create Account"
6. browser_snapshot()  → 确认成功

研究动态内容

用户:GitHub 上现在最热门的仓库是什么?

Agent 工作流:
1. browser_navigate("https://github.com/trending")
2. browser_snapshot(full=true)  → 阅读热门仓库列表
3. 返回格式化的结果

会话录制

自动将浏览器会话录制为 WebM 视频文件:

yaml
browser:
  record_sessions: true  # 默认:false

启用后,录制会在第一个 browser_navigate 时自动开始,并在会话关闭时保存到 ~/.hermes/browser_recordings/。在本地和云(Browserbase)模式下都有效。超过 72 小时的录制会自动清理。

隐身功能

Browserbase 提供自动隐身功能:

功能默认说明
基础隐身始终开启随机指纹、视口随机化、CAPTCHA 解决
住宅代理开启通过住宅 IP 路由以获得更好的访问
高级隐身关闭自定义 Chromium 构建,需要 Scale Plan
保持连接开启网络中断后的会话重新连接

NOTE

如果付费功能在您的计划中不可用,Hermes 会自动回退 —— 首先禁用 keepAlive,然后是代理 —— 因此即使在免费计划上浏览仍然有效。

会话管理

  • 每个任务通过 Browserbase 获得一个隔离的浏览器会话
  • 会话在不活动后自动清理(默认:2 分钟)
  • 后台线程每 30 秒检查一次过期会话
  • 紧急清理在进程退出时运行以防止孤立会话
  • 会话通过 Browserbase API 释放(REQUEST_RELEASE 状态)

限制

  • 基于文本的交互 — 依赖可访问性树,而非像素坐标
  • 快照大小 — 大页面可能被截断或在 8000 个字符时由 LLM 总结
  • 会话超时 — 云会话根据您提供商的计划设置过期
  • 成本 — 云会话消耗提供商积分;会话在对话结束或不活动后自动清理。使用 /browser connect 进行免费本地浏览。
  • 无文件下载 — 无法从浏览器下载文件