Agent工坊

【Agent工坊】Hermes Agent 浏览器自动化:让AI直接上网查资料、截图分析、填表单

你的Agent能写代码但不会上网?给它配个浏览器——3个工具,5个实战场景,让Agent从"代码机器"升级为"数字员工"。

痛点:Agent卡在"信息孤岛"

想象这个场景:

你让Hermes Agent帮你监控竞品动态。Agent能读文件、能执行命令、能调用API——但当你让它"去竞品官网看看最近有什么新功能",它傻眼了。

因为Agent默认没有浏览器。

这正是大多数AI Agent的真实困境:推理能力强,但信息获取能力弱。它们被困在训练数据的"过去"里,无法感知实时世界。

Hermes Agent从v0.12开始内置了一套完整的浏览器自动化工具——browser_navigatebrowser_snapshotbrowser_console。这三个工具让你的Agent真正"上网冲浪",从静态的推理引擎变成动态的信息捕手。

今天这篇教程,教你用5个实战场景彻底掌握这套工具。

工具清单:三个浏览器工具分别干什么

在深入实战前,先搞清楚每个工具的定位:

工具 功能 类比 典型耗时
browser_navigate 打开URL、加载页面 "在地址栏输入网址回车" 3-10秒
browser_snapshot 获取页面无障碍树结构 "用屏幕阅读器看页面骨架" 1-3秒
browser_console 在页面中执行JS并返回结果 "打开F12控制台跑一段代码" 0.5-2秒

关键理解:这三个工具是互补的,不是替代关系。

  • browser_navigate:负责"到达"目标页面
  • browser_snapshot:负责"看到"页面结构(按钮、链接、表单等)
  • browser_console:负责"提取"具体数据(绕过复杂DOM,直接拿内容)

常见误区:很多人以为browser_snapshot能返回完整页面内容——实际上它只返回无障碍树结构(按钮、链接、标题层级等),不包含正文段落。要提取正文内容,必须用browser_console执行JS。

实战场景一:每日竞品监控(cron定时任务)

需求:每天早8点自动检查GitHub上3个竞品仓库的最新Release,汇总信息发到微信。

配置代码(在Skill或cron任务prompt中):

# 竞品监控 Skill 核心逻辑
tools:
  - browser_navigate
  - browser_console

workflow:
  - step: "打开Hermes Agent的Releases页面"
    tool: browser_navigate
    params:
      url: "https://github.com/NousResearch/hermes-agent/releases"

  - step: "提取最新3个Release的标题和发布日期"
    tool: browser_console
    params:
      expression: |
        Array.from(document.querySelectorAll('.release-entry')).slice(0, 3).map(el => ({
          title: el.querySelector('.release-title')?.innerText || '',
          date: el.querySelector('relative-time')?.getAttribute('datetime') || '',
          body: el.querySelector('.markdown-body')?.innerText?.substring(0, 300) || ''
        }))

为什么不用API? 因为:
- GitHub API有速率限制(未认证60次/小时)
- 很多网站根本没有API
- 浏览器方案通用,换个URL就能监控任何网站

cron配置

{
  "name": "竞品监控-HermesAgent",
  "schedule": "0 8 * * *",
  "prompt": "执行竞品监控Skill,检查Hermes Agent最新Release,如有更新生成简报发送到微信"
}

产出效果:每天一条消息 "Hermes Agent v0.15.0 发布:新增vision工具、修复sub-agent token传递bug"。

实战场景二:绕过Cloudflare封锁读文章(web_extract失败时的降级方案)

需求:想读一篇Anthropic官方博客的技术分析,但web_extract被Cloudflare拦截返回432。

这是最高频的实战场景。 web_extract(底层Tavily)对很多网站无效——OpenAI、Anthropic、Medium等全被Cloudflare封锁。此时浏览器工具是唯一出路。

操作流程

Step 1: browser_navigate → "https://www.anthropic.com/engineering/claude-code-quality-report"
Step 2: browser_console → "document.querySelector('article')?.innerText || document.querySelector('.markdown-body')?.innerText || document.body.innerText.substring(0, 8000)"

关键经验(来自实战验证)

  1. browser_snapshot不返回正文——它只显示DOM结构([button][link][heading]等),不包含<p>段落文字。从snapshot判断页面内容就像看骨架猜长相——不靠谱。

  2. browser_console的expression要兜底——不同网站的正文容器不同:

  3. GitHub: .markdown-body
  4. The Verge: .article-content
  5. 通用兜底: document.body.innerText.substring(0, 5000)

  6. Cloudflare验证页无法绕过——如果浏览器本身也遇到Cloudflare挑战页(显示"验证您是真人"),那就是真正的硬墙。此时退而求其次:去HN Algolia搜索文章标题,用HN评论作为替代信息源。

实际案例(来自本系统的真实使用):
- ✅ 成功:GitHub Releases页面(browser_navigatebrowser_console提取release body)
- ✅ 成功:The Verge文章(browser_navigatebrowser_console('.article-content')提取全文)
- ❌ 失败:OpenAI博客(Cloudflare URL级别拦截,浏览器直接访问也遇到挑战页)
- ✅ 成功替代:用HN Algolia APIcurl拉取评论内容作为替代信源

实战场景三:填表单、点按钮——自动化操作

需求:每天自动登录某个SaaS后台,导出昨天的数据报表。

这是一个更高级的场景——不仅要"看"页面,还要"操作"页面。

Hermes Agent的做法:通过browser_console执行JS来模拟用户操作。

示例代码(Skill workflow片段):

// Step 1: 导航到登录页
// browser_navigate: "https://app.example.com/login"

// Step 2: 填写表单
// browser_console:
document.querySelector('#email').value = 'user@example.com';
document.querySelector('#password').value = '********';
document.querySelector('button[type="submit"]').click();

// Step 3: 等待页面跳转(用browser_snapshot检查是否出现"Dashboard"标题)
// browser_snapshot → 检查是否包含 heading "Dashboard"

// Step 4: 点击导出按钮
// browser_console:
document.querySelector('[data-action="export-csv"]').click();

// Step 5: 等待下载完成,读取文件

注意事项
- SPA页面(React/Vue)需要等异步渲染完成,可以在click后sleep 2秒再snapshot
- 如果网站有验证码,这个方案不适用(需要人工介入)
- 敏感操作建议在测试环境先跑通

实战场景四:批量截图存档(网页变化监控)

需求:监控竞争对手官网首页,每天截图存档,发现重大变化时告警。

Hermes Agent虽然没有直接的screenshot工具,但可以通过browser_console调用浏览器的截图能力(如果底层使用Playwright/Puppeteer)。

对于静态页面变化的检测,更实用的方案是提取关键文本做对比:

// browser_console: 提取首页核心内容指纹
JSON.stringify({
  title: document.title,
  h1: document.querySelector('h1')?.innerText,
  heroText: document.querySelector('.hero')?.innerText?.substring(0, 200),
  navItems: Array.from(document.querySelectorAll('nav a')).map(a => a.innerText),
  timestamp: new Date().toISOString()
})

将每天提取的JSON存下来做diff,变化超过阈值就告警。

更轻量的替代方案:如果只需要监控文字内容变化,直接用curl + HTML diff即可,不需要浏览器工具。浏览器工具的价值在于需要JS渲染的SPA页面需要登录态的页面

实战场景五:AI辅助研究——让Agent帮你读论文、看文档

需求:做行业研究时需要快速浏览大量网页,提取关键信息。

这是AI Agent+浏览器最有价值的场景之一。传统做法是手动打开几十个页面,一个个阅读、做笔记。现在可以:

prompt: "帮我调研5个主要的开源AI Agent框架(Hermes、OpenClaw、CrewAI、AutoGen、LangGraph),
对每个框架提取:最新版本号、GitHub Stars数、核心功能列表、最近更新时间。
输出对比表格。"

Agent会自动:
1. browser_navigate 到每个GitHub仓库
2. browser_console 提取Stars数、最新Release版本
3. browser_navigate 到每个框架的文档首页
4. browser_console 提取核心功能描述
5. 汇总成对比表格输出

效率对比
- 人工:打开5个GitHub页面 + 5个文档页面,手动记录 → 约15-20分钟
- Agent:连续10次browser_navigate + 10次browser_console → 约60-90秒

配置要点与踩坑指南

1. 工具授权要精确

在Skill中只授予需要的浏览器工具,不要放通配符:

# ✅ 正确:精确授权
tools:
  - browser_navigate
  - browser_console

# ❌ 错误:过度授权
tools:
  - browser_*  # 避免使用通配符

2. URL白名单(安全必备)

如果Agent运行在自动化的cron任务中,强烈建议browser_navigate设置URL白名单约束:

# 在Skill或sub-agent的system prompt中明确限制
constraints:
  - "browser_navigate仅允许访问以下域名:github.com, news.ycombinator.com, theverge.com"
  - "禁止访问任何内网地址(localhost, 127.*, 192.168.*, 10.*)"
  - "禁止在browser_console中提交表单(仅允许读取操作)"

3. 超时处理

浏览器加载页面可能较慢(尤其是首次访问),建议:
- 单个browser_navigate预期耗时:5-15秒
- 批量操作时串行执行(不要并发打开10个页面)
- 在cron任务中预留足够的超时时间(至少120秒)

4. 错误处理模板

# 稳健的浏览器操作模式(在sub-agent中实现)
try:
    # 1. 导航
    browser_navigate(url)
    # 2. 检查是否遇到Cloudflare
    snapshot = browser_snapshot()
    if "验证您是真人" in snapshot or "Cloudflare" in snapshot:
        return "❌ 被Cloudflare拦截,尝试Web Archive或HN评论替代"
    # 3. 提取内容
    content = browser_console("document.body.innerText.substring(0, 5000)")
    return content
except Exception as e:
    return f"❌ 浏览器操作失败: {e}"

5. 和web_extract的分工

场景 推荐工具 原因
普通博客/新闻站 web_extract 更快,自动转Markdown
Cloudflare站点 browser_navigate + browser_console web_extract返回432
SPA/需要JS渲染 browser_navigate curl只拿到空壳HTML
GitHub Releases browser_navigate 或 GitHub API curl 两种都可用
需要登录的页面 browser_navigate 唯一方案
纯文本/API curl 最快最稳定

总结:三个工具撬动的生产力提升

回到开头的问题:怎么让Agent不再困在"信息孤岛"里?

答案就是这三件套:
- browser_navigate — 让Agent"到达"任何网页
- browser_snapshot — 让Agent"看到"页面结构
- browser_console — 让Agent"提取"任何想要的数据

掌握了这三个工具,你的Agent就不再只是一个会写代码的"计算器",而是一个能上网查资料、监控竞品、填报表单的"数字员工"。

下一步行动
1. 打开你的Hermes Agent,试着跑一遍场景一的GitHub监控
2. 把你日常手动重复的网页操作列出来,挑一个最简单的用browser_console自动化
3. 配置一个cron任务,让Agent每天早上帮你查一遍关注的页面

💡 提示:如果你是OpenClaw用户,OpenClaw也有类似的浏览器工具(playwright_*系列),原理相通,配置稍有不同。下一篇我们专门讲OpenClaw的浏览器自动化方案。


Agent工坊 #HermesAgent #浏览器自动化 #AI工具 #一人公司