ruflo 浏览器自动化技能指南:基于 agent-browser 的 AI 优化快照与 Claude-Flow 集成实战
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
浏览器自动化是 AI Agent 落地真实业务的关键能力,而传统 DOM/CSS 选择器方案对 LLM 极其不友好——超长页面会把上下文撑爆。本文以 ruflo 仓库中v3/@claude-flow/browser模块的浏览器技能文档为主体,系统讲解基于 agent-browser CLI 的自动化工作流:如何用元素引用(Element Refs)将上下文消耗降低 93%,如何通过snapshot -i获取仅含可交互元素的无障碍树,以及如何与 Claude-Flow 的记忆、Hooks 与 MCP 工具体系深度集成。读完本文,你将掌握一套可复制、可运行的浏览器自动化技能,并理解其背后的源码级原理。
一、技能概览:为 Agent 优化的浏览器自动化
浏览器技能(Browser Automation Skill)位于 v3/@claude-flow/browser/skills/browser/SKILL.md,其技能元数据定义如下:
name: browser description: Web browser automation with AI-optimized snapshots for claude-flow agents version: 1.0.0 triggers: - /browser - browse - web automation - scrape - navigate - screenshot tools: - browser/open - browser/snapshot - browser/click - browser/fill - browser/screenshot - browser/close核心设计理念只有一句话:用元素引用(@e1、@e2)代替完整 DOM 来压缩上下文。该技能声称可将上下文消耗降低 93%——其依据在 v3/@claude-flow/browser/README.md 中有明确示例:传统写法body > div.container > form#login > button[type="submit"].btn.btn-primary对应的元素引用仅为@e3。元素引用来源于无障碍树快照,指向页面上的可交互元素。
从源码结构看,该模块采用分层架构(src/index.ts 及各子目录):
- 领域层(src/domain):定义
ActionResult、Snapshot、OpenInput、ClickInput等类型与浏览器适配接口; - 应用层(src/application):
BrowserService聚合业务逻辑、action-router负责动作分发; - 基础设施层(src/infrastructure):
AgentBrowserAdapter封装 agent-browser CLI 调用,memory-integration、hooks-integration、security-integration完成生态对接; - MCP 工具层(src/mcp-tools/browser-tools.ts):将全部操作注册为
browser/前缀的 MCP 工具。
二、环境准备与核心工作流
2.1 安装依赖
技能依赖 agent-browser CLI 与 Claude-Flow 运行时:
# agent-browser CLI(全局安装,必需) npm install -g agent-browser # Claude-Flow CLI(对等依赖) npm install @claude-flow/cli@^3.0.0-alpha # Playwright 浏览器(agent-browser 通常会自动安装,缺失时手动补装) npx playwright install2.2 四步核心工作流
任何自动化任务都遵循"打开 → 快照 → 交互 → 重新快照"的循环:
# 1. 导航到页面 agent-browser open <url> # 2. 获取含元素引用的无障碍树(-i = 仅可交互元素) agent-browser snapshot -i # 3. 使用快照返回的引用进行交互 agent-browser click @e2 agent-browser fill @e3 "text" # 4. 页面状态变化后重新快照 agent-browser snapshot -i第 4 步至关重要:页面跳转、弹窗、异步渲染都会让旧引用失效,每次导航后都必须重新快照。这也是 SKILL.md Tips 中第 4 条"Re-snapshot after navigation"的由来。
三、命令速查手册
3.1 导航(Navigation)
| 命令 | 说明 |
|---|---|
open <url> | 导航到 URL |
back | 后退 |
forward | 前进 |
reload | 刷新页面 |
close | 关闭浏览器 |
在 MCP 工具层,这些对应 browser-tools.ts 中的browser/open、browser/back、browser/forward、browser/reload、browser/close。其中browser/open支持三个可选参数:waitUntil(可选load、domcontentloaded、networkidle)、headers(设置限定于 URL 来源域的 HTTP 头)、session(隔离会话)。底层实现见 agent-browser-adapter.ts,它通过execFileSync拼装open <url> [--wait <state>] [--headers <json>]调用 agent-browser。
3.2 快照与截图(AI 优化)
| 命令 | 说明 |
|---|---|
snapshot | 完整无障碍树 |
snapshot -i | 仅可交互元素(按钮、链接、输入框) |
snapshot -c | 紧凑模式(移除空元素) |
snapshot -d 3 | 限制树深度为 3 层 |
screenshot [path] | 截图(不传路径时返回 base64) |
快照是技能的灵魂。在 MCP 工具browser/snapshot的定义中(browser-tools.ts),interactive与compact默认均为true,即"只显示可交互元素 + 移除空结构元素",正是为了把 LLM 收到的 DOM 压缩到最小。快照还支持selector参数,可将快照范围限定在某个 CSS 选择器内。适配层实现(agent-browser-adapter.ts)会将这些选项映射为-i、-c、-d、-s命令行参数。
3.3 交互(Interaction)
| 命令 | 说明 |
|---|---|
click <sel> | 点击元素 |
fill <sel> <text> | 清空并填充输入框 |
type <sel> <text> | 以键盘事件方式输入 |
press <key> | 按键(Enter、Tab 等) |
hover <sel> | 悬停 |
select <sel> <val> | 选择下拉选项 |
check/uncheck <sel> | 勾选/取消勾选复选框 |
scroll <dir> [px] | 滚动页面 |
适配层为这些命令提供了更细的参数(agent-browser-adapter.ts):click支持--button(left/right/middle)、--click-count(2 表示双击)、--force(元素不可见时强制点击);type支持--delay模拟真实输入节奏;scroll支持 up/down/left/right 方向与像素值。此外还有快照引用之外的补充操作:dblclick、focus、scrollintoview、drag、upload,可用于文件上传等复杂场景。
3.4 信息获取(Get Info)
| 命令 | 说明 |
|---|---|
get text <sel> | 获取文本内容 |
get html <sel> | 获取 innerHTML |
get value <sel> | 获取输入框值 |
get attr <sel> <attr> | 获取属性 |
get title | 获取页面标题 |
get url | 获取当前 URL |
适配层还扩展了get count(统计元素数量)与get box(获取元素坐标尺寸),以及is visible/enabled/checked状态断言(agent-browser-adapter.ts),这些对测试类 Agent 非常实用。
3.5 等待(Wait)
| 命令 | 说明 |
|---|---|
wait <selector> | 等待元素出现 |
wait <ms> | 等待指定毫秒数 |
wait --text "text" | 等待文本出现 |
wait --url "pattern" | 等待 URL 匹配模式 |
wait --load networkidle | 等待加载状态 |
等待是避免竞态条件的关键。适配层实现(agent-browser-adapter.ts)还支持--fn传入自定义等待函数,四类条件(selector / text / url / load)任选其一即可。
3.6 会话(Sessions)
| 命令 | 说明 |
|---|---|
--session <name> | 使用隔离会话 |
session list | 列出活动会话 |
会话是并行与隔离的基础。MCP 工具层通过内存中的sessions注册表(Map<string, AgentBrowserAdapter>,见 browser-tools.ts)按 session ID 复用适配器实例,多个 Agent 可共享浏览器进程但互不干扰;browser/close关闭会话后会自动从注册表中移除。
四、选择器体系:三种定位方式
4.1 元素引用(推荐)
# 从快照获取引用 agent-browser snapshot -i # Output: button "Submit" [ref=e2] # 使用引用交互 agent-browser click @e2元素引用直接来自无障碍树,确定性强、输出紧凑,是技能文档明确推荐的首选方式。
4.2 CSS 选择器
agent-browser click "#submit" agent-browser fill ".email-input" "test@test.com"CSS 选择器适合快照之外的兜底定位,但表达冗长,会显著增加上下文开销。
4.3 语义定位器(Semantic Locators)
agent-browser find role button click --name "Submit" agent-browser find label "Email" fill "test@test.com" agent-browser find testid "login-btn" click语义定位器按 role、label、testid 等语义属性定位,接近自然语言表达,比 CSS 更稳定,适合页面结构频繁变化的场景。
五、实战示例
5.1 登录流程
agent-browser open https://example.com/login agent-browser snapshot -i agent-browser fill @e2 "user@example.com" agent-browser fill @e3 "password123" agent-browser click @e4 agent-browser wait --url "**/dashboard"5.2 表单提交
agent-browser open https://example.com/contact agent-browser snapshot -i agent-browser fill @e1 "John Doe" agent-browser fill @e2 "john@example.com" agent-browser fill @e3 "Hello, this is my message" agent-browser click @e4 agent-browser wait --text "Thank you"5.3 数据提取
agent-browser open https://example.com/products agent-browser snapshot -i # 遍历产品元素引用 agent-browser get text @e1 # 产品名 agent-browser get text @e2 # 价格 agent-browser get attr @e3 href # 链接在编程式场景中,README.md 展示了等价的 TypeScript 写法:browser.extractData(['@e1', '@e2', '@e3'])可批量提取多个引用的文本,返回Record<string, string>。
5.4 多会话协作(Swarm)
# 会话 1:导航者(Navigator)登录并保存状态 agent-browser --session nav open https://example.com agent-browser --session nav state save auth.json # 会话 2:爬取者(Scraper)复用同一登录态 agent-browser --session scrape state load auth.json agent-browser --session scrape open https://example.com/data agent-browser --session scrape snapshot -i这种"导航者登录、多个爬取者共享认证态"的模式是 Swarm 并行爬取的标准做法:只做一次认证,所有工作会话复用,既高效又避免触发风控。模块提供了createBrowserSwarm(见 README.md)用于程序化编排,支持hierarchical拓扑与navigator/scraper/validator/tester/monitor五种预置角色。
六、与 Claude-Flow 的深度集成
6.1 MCP 工具集成
所有浏览器操作均以browser/前缀注册为 MCP 工具(browser-tools.ts),技能元数据声明了核心六个:browser/open、browser/snapshot、browser/click、browser/fill、browser/screenshot、browser/close。注册方式:
import { browserTools } from '@claude-flow/browser'; mcpServer.registerTools(browserTools);每个工具都带 JSON Schema 输入校验,例如browser/click的button字段枚举left|right|middle且默认left、force可强制点击不可见元素(browser-tools.ts)。技能的导出入口在 src/skill/index.ts,它将 MCP 工具、BrowserService与 Hooks 一并对外暴露。
6.2 记忆集成(Memory Integration)
成功的行为模式可以沉淀为可复用的"模式记忆",下次遇到相似任务时直接检索:
# 存储成功模式 npx @claude-flow/cli memory store --namespace browser-patterns --key "login-flow" --value "snapshot->fill->click->wait" # 相似任务前检索 npx @claude-flow/cli memory search --query "login automation"程序化层面,BrowserMemoryManager(见 README.md)提供storeTrajectory、storePattern、storeSnapshot、storeError,以及语义检索findSimilarTrajectories与getSessionStats。轨迹(Trajectory)在browser.startTrajectory(goal)时开始记录、endTrajectory(success, verdict)时落库,其中包含目标、逐步动作、每步快照与成败判定——这些数据会交给 ReasoningBank 进行模式学习。
6.3 Hooks 集成
# 浏览前 Hook:获取上下文建议 npx @claude-flow/cli hooks pre-edit --file "browser-task.ts" # 浏览后 Hook:记录执行结果 npx @claude-flow/cli hooks post-task --task-id "browse-1" --success truepreBrowseHook会根据目标推荐步骤、检索相似模式并给出模型建议与安全警告;postBrowseHook记录轨迹结果,若成功则沉淀为模式供下次复用(README.md 的 Hooks Integration 章节)。
6.4 安全集成
README 明确该模块是安全优先设计:createBrowserService({ enableSecurity: true })默认开启 URL 校验与 PII 检测。scanUrl会识别钓鱼仿冒域名(如paypa1-secure.xyz)、非法 TLD;scanForPII能识别身份证、信用卡等敏感信息并打码(如***-**-6789);validateInput可拦截 XSS 与 SQL 注入载荷。安全扫描器支持requireHttps、blockedDomains、allowedDomains、maxRedirects等配置(见 README.md 的 Security Scanner API)。
七、使用建议与注意事项
- 始终使用快照——快照针对 AI 优化过,自带元素引用;
- 优先
-i标志——只取可交互元素,输出更小、信噪比更高; - 用引用而非选择器——更可靠、更确定;
- 导航后重新快照——页面状态会变,旧引用会失效;
- 并行任务用会话隔离——每个会话相互独立,避免共享状态冲突。
八、相关资源
- 技能定义:v3/@claude-flow/browser/skills/browser/SKILL.md
- 模块说明与 API:v3/@claude-flow/browser/README.md
- MCP 工具实现:v3/@claude-flow/browser/src/mcp-tools/browser-tools.ts
- CLI 适配层:v3/@claude-flow/browser/src/infrastructure/agent-browser-adapter.ts
- 技能导出:v3/@claude-flow/browser/src/skill/index.ts
- 测试用例:v3/@claude-flow/browser/tests(覆盖适配器、安全、记忆、轨迹等 128 项测试)
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考