你的Agent能写代码但不会上网?给它配个浏览器——3个工具,5个实战场景,让Agent从"代码机器"升级为"数字员工"。
痛点:Agent卡在"信息孤岛"
想象这个场景:
你让Hermes Agent帮你监控竞品动态。Agent能读文件、能执行命令、能调用API——但当你让它"去竞品官网看看最近有什么新功能",它傻眼了。
因为Agent默认没有浏览器。
这正是大多数AI Agent的真实困境:推理能力强,但信息获取能力弱。它们被困在训练数据的"过去"里,无法感知实时世界。
Hermes Agent从v0.12开始内置了一套完整的浏览器自动化工具——browser_navigate、browser_snapshot、browser_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)"
关键经验(来自实战验证):
-
browser_snapshot不返回正文——它只显示DOM结构([button]、[link]、[heading]等),不包含<p>段落文字。从snapshot判断页面内容就像看骨架猜长相——不靠谱。 -
browser_console的expression要兜底——不同网站的正文容器不同: - GitHub:
.markdown-body - The Verge:
.article-content -
通用兜底:
document.body.innerText.substring(0, 5000) -
Cloudflare验证页无法绕过——如果浏览器本身也遇到Cloudflare挑战页(显示"验证您是真人"),那就是真正的硬墙。此时退而求其次:去HN Algolia搜索文章标题,用HN评论作为替代信息源。
实际案例(来自本系统的真实使用):
- ✅ 成功:GitHub Releases页面(browser_navigate → browser_console提取release body)
- ✅ 成功:The Verge文章(browser_navigate → browser_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的浏览器自动化方案。
