ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

open-agents 中 agent-browser 的 Snapshot + Refs 工作流:用紧凑元素引用把浏览器自动化上下文开销降低一个数量级

open-agents 中 agent-browser 的 Snapshot + Refs 工作流:用紧凑元素引用把浏览器自动化上下文开销降低一个数量级 open-agents 中 agent-browser 的 Snapshot Refs 工作流用紧凑元素引用把浏览器自动化上下文开销降低一个数量级【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agentsagent-browser 是 open-agents 项目中用于浏览器自动化网页导航、表单填写、截图、数据提取、UI 端到端验证的技能skill而 Snapshot Refs 工作流是它的核心创新用紧凑的快照与元素引用e1、e2等替代向 AI 传递完整 DOM从而显著压缩每次交互的 token 消耗。本文以 snapshot-refs.md 为骨架结合 agent-browser SKILL.md、仓库中的可执行模板如 form-automation.sh以及沙箱侧的集成说明完整讲解 snapshot 命令的用法、ref 的表示法与生命周期、失效规则、最佳实践与故障排查帮助你为 Agent 写出低开销、高稳定性的浏览器自动化流程。一、核心思路为什么是 Snapshot Refs1.1 传统方案的问题在典型的浏览器自动化里AI Agent 需要看懂页面才能操作元素。传统做法是把完整 DOM/HTML 交给模型Full DOM/HTML sent → AI parses → Generates CSS selector → Executes action ~3000-5000 tokens per interaction每次交互 30005000 token且模型还要自行推断 CSS 选择器。在多步操作登录、填表、分页抓取场景下上下文会被快速消耗同时选择器推断也可能因页面结构复杂而出错。1.2 agent-browser 的解法agent-browser 改为输出紧凑快照并给每个元素分配唯一引用refCompact snapshot → refs assigned → Direct ref interaction ~200-400 tokens per interactionAgent 不再解析整棵 DOM 树而是直接拿着快照里给出的e1、e2这样的引用去执行click、fill等动作。单次交互的 token 开销降到约 200400这是该工作流被定义为 agent-browser 核心创新的原因出处snapshot-refs.md 开头部分。需要说明的是上面的 token 数字来自原文档自身的估算对比用于说明量级差异实际开销会随页面结构、快照深度等因素变化。二、Snapshot 命令给页面拍一张结构化快照2.1 基本用法# 基础快照展示页面结构 agent-browser snapshot # 交互式快照-i 标志- 推荐 agent-browser snapshot -i-i是RECOMMENDED推荐的用法因为它只返回可交互元素按钮、输入框、链接、下拉框等并附带 ref而普通snapshot返回的是完整可访问性树accessibility tree元素更多、token 更贵。2.2 快照命令的常用选项结合 SKILL.mdsnapshot还支持多种参数来控制输出的范围与密度agent-browser snapshot # 完整可访问性树 agent-browser snapshot -i # 仅可交互元素推荐 agent-browser snapshot -c # 紧凑输出 agent-browser snapshot -d 3 # 限制深度为 3 层 agent-browser snapshot -s #main # 作用域限定到 CSS 选择器-c紧凑模式减少缩进与冗余信息-d n限制快照的嵌套深度适合层级很深的页面-s selector只快照某个容器内的元素是局部快照的另一个入口。2.3 快照输出格式快照输出形如原文档示例Page: Example Site - Home URL: https://example.com e1 [header] e2 [nav] e3 [a] Home e4 [a] Products e5 [a] About e6 [button] Sign In e7 [main] e8 [h1] Welcome e9 [form] e10 [input typeemail] placeholderEmail e11 [input typepassword] placeholderPassword e12 [button typesubmit] Log In e13 [footer] e14 [a] Privacy Policy头部是页面标题Page:与当前 URLURL:随后是带缩进的元素树。每个元素行由编号[标签] 可见文本/关键属性组成。三、Ref 表示法一行读懂一个元素ref 是 Agent 与页面元素交互的唯一句柄。其完整结构如下原文档e1 [tag typevalue] text content placeholderhint │ │ │ │ │ │ │ │ │ └─ 附加属性Additional attributes │ │ │ └─ 可见文本Visible text │ │ └─ 展示的关键属性Key attributes shown │ └─ HTML 标签名HTML tag name └─ 唯一引用 IDUnique ref ID常见模式速查原文档给出了一组可对照使用的常见模式e1 [button] Submit # 带文本的按钮 e2 [input typeemail] # 邮箱输入框 e3 [input typepassword] # 密码输入框 e4 [a href/page] Link Text # 锚点链接 e5 [select] # 下拉框 e6 [textarea] placeholderMessage # 文本域 e7 [div classmodal] # 容器相关时才出现 e8 [img altLogo] # 图片 e9 [checkbox] checked # 已勾选的复选框 e10 [radio] selected # 已选中的单选按钮注意[select]、[div]这类容器型元素只在与当前操作相关时才出现在快照里快照会自动省略无关的包装层这正是它比完整 DOM 更紧凑的原因之一。四、用 Refs 交互拿到引用直接操作快照拿到 ref 后交互就变成了直呼其名# 点击 Sign In 按钮 agent-browser click e6 # 填写邮箱输入框 agent-browser fill e10 userexample.com # 填写密码 agent-browser fill e11 password123 # 提交表单 agent-browser click e12fill是清空后输入如果希望保留原有内容继续输入可用type见 SKILL.md。除 click/fill 外基于 ref 的交互命令还包括dblclick、focus、hover、check、uncheck、select、scrollintoview、drag、upload等覆盖了表单与页面操作的主要场景。五、Ref 生命周期页面一变ref 即失效重要提醒当页面发生变化时ref 会被作废Refs are invalidated when the page changes!。原文档给出了经典示范# 获取初始快照 agent-browser snapshot -i # e1 [button] Next # 点击触发了页面跳转 agent-browser click e1 # 必须重新快照才能拿到新 ref agent-browser snapshot -i # e1 [h1] Page 2 ← 此时 e1 指向的是另一个元素同一编号e1在新快照里可能指向完全不同的元素——ref 编号是按快照生成顺序分配的稳定句柄而不是元素在页面上的固定 ID。因此任何导航、重渲染、异步内容加载之后都必须以最新一次快照中的 ref 为准。六、最佳实践四条铁律6.1 交互前永远先快照# 正确 agent-browser open https://example.com agent-browser snapshot -i # 先拿 ref agent-browser click e1 # 再用 ref # 错误 agent-browser open https://example.com agent-browser click e1 # 此时 ref 还不存在6.2 导航后重新快照agent-browser click e5 # 跳转到新页面 agent-browser snapshot -i # 获取新页面的 ref agent-browser click e1 # 使用新 ref6.3 动态变化后重新快照agent-browser click e1 # 打开下拉菜单 agent-browser snapshot -i # 此时才能看到下拉项 agent-browser click e7 # 选择某一项下拉菜单、弹层、异步加载列表这类动态内容在展开/加载完成后才会进入可交互快照因此展开 → 重新快照 → 选择是标准节奏。6.4 对复杂页面做局部快照# 只快照表单区域 agent-browser snapshot e9复杂的整页快照会引入大量无关元素。此时可以直接给snapshot传一个 ref 作为作用域等价于-s指定 CSS 选择器把注意力集中到目标容器。七、故障排查常见报错与对策现象原因与对策Ref not found 错误ref 可能已随页面变化失效重新执行agent-browser snapshot -i拿最新 ref元素在快照中不可见元素可能在视口之外先agent-browser scroll --bottom滚动到底部再快照或元素是动态加载的先agent-browser wait 1000等待再快照快照元素过多对特定容器做局部快照agent-browser snapshot e5或改用agent-browser get text e5只做纯文本内容提取不生成可交互 ref除上述原文档给出的对策外wait命令族SKILL.md值得优先使用agent-browser wait e1等待元素出现、agent-browser wait 2000等待毫秒数、agent-browser wait --load networkidle等待网络空闲、agent-browser wait --text Success等待文本出现。相比固定延时等待元素/文本/网络空闲更能应对动态页面。八、在 open-agents 项目中的实际落地场景snapshot refs 工作流不是孤立的 CLI 技巧它在 open-agents 的 Agent 体系中扮演着两个关键角色沙箱内的 UI / 端到端验证在 packages/sandbox/vercel/sandbox.ts 的环境提示中明确写道沙箱快照已内置 agent-browser验证 UI 或端到端行为时应启动开发服务器并用 agent-browser 对着本地开发服务器 URL 进行操作。也就是说Agent 在云沙箱里做 UI 验证时用的正是这套 snapshot refs 交互协议相应的行为断言也出现在 packages/sandbox/vercel/sandbox.test.ts 的测试中。可复用的模板脚本仓库为最常见的自动化模式提供了可直接执行的模板见 SKILL.md。其中 form-automation.sh 完整演示了表单自动化的规范流程正好是快照 refs 的实战样板#!/bin/bash set -euo pipefail FORM_URL${1:?Usage: $0 form-url} # 1. 导航并等待网络空闲 agent-browser open $FORM_URL agent-browser wait --load networkidle # 2. 分析表单结构拿 ref echo Analyzing form structure... agent-browser snapshot -i # 3. 按需填写ref 以实际快照输出为准 # agent-browser fill e1 John Doe # 姓名字段 # agent-browser fill e2 userexample.com # 邮箱字段 # agent-browser fill e3 1-555-123-4567 # 电话字段 # agent-browser select e5 Option Value # 下拉框 # agent-browser check e6 # 勾选复选框 # agent-browser upload e10 /path/to/file.pdf # 文件上传 # agent-browser click e11 # 提交按钮 # 4. 等待响应 # agent-browser wait --load networkidle # agent-browser wait --url **/success # 5. 验证结果并收尾 agent-browser get url agent-browser snapshot -i agent-browser screenshot /tmp/form-result.png agent-browser close模板form-automation.sh清晰映射了最佳实践open → wait → snapshot -i → 用 ref 交互 → wait 响应 → 重新 snapshot 验证 → 截图/关闭。get url用于确认表单提交后的跳转wait --url **/success可用于等待特定重定向。九、何时可以放弃 refs语义定位器作为替代对某些场景例如快照里没拿到想要的 ref、或希望按语义找元素agent-browser 还提供find命令族作为 refs 的补充见 SKILL.mdagent-browser find role button click --name Submit agent-browser find text Sign In click agent-browser find label Email fill usertest.com agent-browser find placeholder Search type query agent-browser find alt Logo click agent-browser find testid submit-btn click agent-browser find first .item click agent-browser find nth 2 a hover语义定位器role/text/label/placeholder/alt/title/testid不需要预先快照但在动态页面上它们依赖文本或属性匹配稳定性不如同一快照内分配的 ref。推荐的取舍是首选 refs 完成主流程遇到 ref 失效或元素无法通过快照表达时用find兜底。十、小结Snapshot Refs 工作流的核心可以浓缩为三句话先快照、后交互任何操作前先执行agent-browser snapshot -i以最新快照中的ref为准页面一变、ref 即废导航、动态渲染、异步加载后必须重新快照按需裁剪用-i、-c、-d、-s以及局部快照snapshot ref控制输出规模把每次交互的 token 开销维持在紧凑区间。这套机制与仓库沙箱环境sandbox.ts 中 agent-browser 的预装与推荐用法和可执行模板form-automation.sh相互配合构成了 open-agents 中 Agent 进行网页自动化与 UI 验证的标准路径。想进一步深入可以继续阅读同目录下的 session-management.md并行会话与状态持久化、authentication.md登录与鉴权状态复用与 SKILL.md完整命令参考。【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表