当前位置: 首页
AI教程
小龙虾浏览器工具配置学习(二)

小龙虾浏览器工具配置学习(二)

热心网友 时间:2026-06-05
转载

上一篇我们把 browser 工具的运行环境从头捋了一遍:先学会怎么定义参数,再弄明白怎么用 host sandbox node 决定浏览器跑在哪儿,最后用 profile 确定用哪个浏览器干活。环境备齐了,这篇书接上文,来看看 agent 到底是怎么驱动浏览器在页面上点点点的,以及这套动作

上一篇我们把 browser 工具的运行环境从头捋了一遍:先学会怎么定义参数,再弄明白怎么用 host / sandbox / node 决定浏览器跑在哪儿,最后用 profile 确定用哪个浏览器干活。环境备齐了,这篇书接上文,来看看 agent 到底是怎么驱动浏览器在页面上点点点的,以及这套动作背后的门道。

标签页管理

browser 一次只在一个标签页上干活,所以动手之前,得先认准操作哪个标签页。试试用 openclaw browser <动作> 命令行来管理它。开新标签页用 open,网址作参数,再用 --label 顺手贴个标签:

$ openclaw browser open https://www.aneasystone.com --label blog
opened: https://www.aneasystone.com/
tab: t1
label: blog
id: 7E73979D64CBF48058818D78D50FB94B

这条命令返回了好几个参数:tab 是像 t1 这样稳定的 tabIdlabel 是我们自己起的 blog 标签,id 则是 CDP 协议的原始 targetId。这几个参数都可以作为后续操作这个标签页时的标识。比如之后想再定位到它,用 focus 把它切到前台就行。tabIdlabeltargetId 这三种都认,下面三条指向的都是同一个页面:

$ openclaw browser focus t1  # 用 tabId
$ openclaw browser focus blog  # 用 label
$ openclaw browser focus 7E73979D  # 用 targetId(前缀也认)

这里有个容易搞混的点:open 是每次都新开一个标签页,而 na vigate 是让当前标签页原地跳到另一个网址。所以常见的用法是先 focus 选中,再 na vigate 到某个网址;当然也可以加上可选的 --target-id 直接跳转:

$ openclaw browser na vigate https://www.aneasystone.com/about-me.html --target-id blog

再开一个不带 label 的,然后用 tabs 列出所有的标签页:

$ openclaw browser open https://www.baidu.com
opened: https://www.baidu.com/
tab: t2
id: 9B0D7E3F1A2C4856E7F0A1B2C3D4E5F6

$ openclaw browser tabs
1. aneasystone's blog [t1 label:blog] https://www.aneasystone.com/ id: 7E73979D64CBF48058818D78D50FB94B
2. 百度一下,你就知道 [t2] https://www.baidu.com/ id: 9B0D7E3F1A2C4856E7F0A1B2C3D4E5F6

如果觉得不够详细,可以加一个 --json 参数,看到完整的数据结构,对排查问题会很有帮助:

$ openclaw browser --json tabs
{
  "tabs": [
    {
      "targetId": "7E73979D64CBF48058818D78D50FB94B",
      "title": "aneasystone's blog",
      "url": "https://www.aneasystone.com/",
      "wsUrl": "ws://127.0.0.1:18800/devtools/page/7E73979D64CBF48058818D78D50FB94B",
      "type": "page",
      "suggestedTargetId": "blog",
      "tabId": "t1",
      "label": "blog"
    }
  ]
}

收尾时用 close 把标签页关掉:

$ openclaw browser close blog
closed tab

就算忘了关也别担心,OpenClaw 给主 agent 的浏览器会话配了一套自动清理机制。空闲超过一定时间(默认 120 分钟)的标签页会被回收,每个会话还有个标签页数量上限(默认 8 个),后台每隔几分钟扫一遍;子 agent、cron、ACP 这类任务跑完时,也会顺手把自己开的标签页关掉,不至于在后台留下一堆孤儿窗口。

SSRF 防护

刚才用 openna vigate 打开网址,看着什么链接都能打开,其实不然。之前学工具箱时就提到过,web_fetch 自带一套 SSRF 防护:凡是能由外部输入决定去访问哪个地址的工具,都得防着被人诱导去访问内网。浏览器更是如此,它能被导航到任意 URL,风险敞口只大不小。所以 OpenClaw 也给它单独配了一套独立的、默认 fail-closed 的 SSRF 防护,下面我们稍微展开看看。

OpenClaw 会在导航和新开标签页之前先过一道 SSRF 检查,等浏览器真正解析出最终那个 http(s) 地址之后,再复查一遍。这一前一后是有讲究的,专门防 30x 重定向绕过:链接乍看是个干净的公网地址,轻松过了第一关,跳转之后才露出内网地址,正好被第二道复查逮住。默认拦在门外的,包括私网地址、本机环回、link-local,以及云厂商的元数据地址。

那真要放行某个内网地址呢?最稳妥的做法是只给信得过的那几个域名开放,把它们加进 browser.ssrfPolicy 的白名单。比如想让 agent 访问内网的 grafana.corp.example,配置写在 ~/.openclaw/openclaw.json 里:

{
  "browser": {
    "ssrfPolicy": {
      // 精确匹配:列出的域名原样放行
      "allowedHostnames": ["grafana.corp.example"],
      // 通配匹配:* 能匹配子域,一条顶一片
      "hostnameAllowlist": ["*.corp.example"]
    }
  }
}

这两个参数的差别只在匹配方式:allowedHostnames 按完整域名精确比对,hostnameAllowlist 支持 * 通配符。命中白名单的域名,即便最终解析到私网地址,也照样放行。

要是内网地址比较多、一个个域名往白名单里加嫌麻烦,也可以用一个开关把私网整个放开:

{
  "browser": {
    "ssrfPolicy": {
      "dangerouslyAllowPrivateNetwork": true
    }
  }
}

不过光看名字里那个 dangerously 就该警觉:它会让浏览器对所有私网地址都不再拦截,所以默认是关着的,只有在你确实信任、也评审过的私网环境下才建议打开。

页面操作

标签页开好了,接下来就是在这个页面上干活。browser 在页面这一层的动作不少,但总体来说是三件事:看、做、核对。先用 snapshot 看清页面上有什么,再用 act 系列动手操作,需要时用 screenshot 截图核对;除此之外还有几个偏辅助的动作。下面一类一类来看。

看清页面:snapshot

OpenClaw 在看清页面这块做得就很聪明,它不会把页面的原始 HTML/DOM 一股脑塞给模型。原因很简单,网页源码又长又乱,满屏

、一堆样式类名,模型读起来既理不清结构,又白白烧掉一大把 token。

那它给模型看什么呢?是浏览器的无障碍树(accessibility tree)。这名字听着陌生,其实天天都有人在用:盲人靠屏幕阅读器读网页,背后就是这棵树。它不管页面长什么样,只按语义把内容归成按钮、输入框、链接、标题这些角色,每个角色再配一个看得懂的名字(被称为 accessible name,一般就是按钮上的文字、输入框旁边的 label 等),父子层级用缩进表示。说白了,它把一个给人看的花哨页面,压缩成了一份给机器读的、干净的结构清单。

OpenClaw 又在这棵树上加了道工序:给每个能点、能填的节点编一个稳定的编号,也就是 ref。这么一来,模型根本不用管某个元素长什么样、藏在第几层,认准要操作哪个 ref 就行。快照的结果大致长这样:

- button "Sa ve" [ref=e1]
- link "Docs" [ref=e2]:
  - /url: https://docs.openclaw.ai/
- generic "Clickable Card" [ref=e3] [cursor=pointer]
- textbox "Email" [ref=e4]

每一行就是「角色 + 名称 + [ref=eN]」:链接底下会挂一个 /url: 标出它的目标地址,可点击的非标准元素则注明 [cursor=pointer](表示它虽然没有标准的按钮或链接样式,但点得动)。碰到 iframe,则嵌套着往里展开:

- Iframe "Child" [ref=e1]
  - button "Inside" [ref=e2]

模型拿到这棵树,想点「Sa ve」,只回一句 act 带上 ref=e1 就行,完全不用关心它在 DOM 里到底是第几个

来源:https://juejin.cn/post/7647072739918249994

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
ESP32自定义唤醒词:TFLite到离线语音唤醒一下午搞定

ESP32自定义唤醒词:TFLite到离线语音唤醒一下午搞定

基于TFLiteMicro和ESP-IDF,在ESP32-S3上实现自定义唤醒词离线语音识别。通过5层检测管线控制误触发,模型可从voicute com在线生成并直接部署。系统推理耗时约360ms,模型体积小于80KB,支持用户自定义唤醒词且无需联网。

时间:2026-07-14 16:20
GPT-5.6选Sol还是Terra Luna 素材库项目为何用Sol+Medium

GPT-5.6选Sol还是Terra Luna 素材库项目为何用Sol+Medium

GPT-5 6Sol、Terra、Luna分别对应旗舰、平衡与高吞吐层级。素材库项目初始化用Sol+High确立规则,日常维护选Sol+Medium而非Terra+High,因日常输入杂乱、小错误累积,Medium已满足需求且减少模型切换成本。

时间:2026-07-14 16:19
AI Agent中Tracker的真正作用解析

AI Agent中Tracker的真正作用解析

Tracker是AIAgent的运行时状态中心,记录当前任务进度、槽位、流程和最近动作,解决上下文丢失与任务恢复问题。它不同于长期记忆和知识库,遵循统一状态源,确保系统各模块状态一致,避免混乱。

时间:2026-07-14 16:19
技术深度解析Apifox Agent为何选择CLI+SKILL而非更多MCP工具的根本原因

技术深度解析Apifox Agent为何选择CLI+SKILL而非更多MCP工具的根本原因

ApifoxAgent采用CLI与SKILL组合方案,将原子能力收敛为清晰工程动作,通过cli-schema校验、agentHints引导和任务判断规范,使Agent在正确时机稳定完成读取、校验、写入与验证,同时保持CI CD友好,为复杂工程产品提供更合适的执行层。

时间:2026-07-14 16:19
Claude Code Skill不触发乱触发跑挂调优指南

Claude Code Skill不触发乱触发跑挂调优指南

Skill触发依赖语义匹配,存在欠触发、误触发、执行失败三类故障。通过15条评测集量化触发精度,并用评分表评估输出质量,迭代优化description与DoNotUseWhen段可有效修复。

时间:2026-07-14 16:19
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜