SemibotSemibot - AI桌面客户端
全部指南

内置浏览器:AI Agent 如何看见并与网页交互

内置浏览器让你指向任意网页上的按钮、段落或区域,让 Agent 解释、修改或执行操作。设计难点是在不泄露 DOM 的前提下提取结构化引用。

定义:Semibot 的内置浏览器是一个嵌入式网页视图,让用户在任意网页上选择元素——按钮、文本、图片、区域——并将其作为结构化引用附加到对话中。Agent 接收选中的内容、页面上下文和该区域的截图,但不接收完整的 DOM、表单值或可执行节点句柄。设计将网页内容视为数据,而非系统指令。

元素选择的工作原理

地址栏提供「选择元素」入口。进入选择模式后,浏览器的自动化层暂停,显示选择提示,鼠标悬停时高亮元素。点击会采集引用而不触发页面自身的点击处理器。Shift+点击启用多选。按 Esc 退出选择模式,焦点回到对话输入框。

采集到的引用是一个 BrowserElementReference:结构化对象,包含页面标题、脱敏后的 URL(去除用户名、密码、查询参数和哈希片段)、采集时间、可见文本、元素角色、边界矩形和本地截图。Agent 接收这些数据——永远不会拿到原始 DOM 节点或 CDP 句柄。

隐私模型

隐私边界是核心设计约束:

  • URL 脱敏。存储前去除用户名、密码、查询参数和哈希片段。
  • 不采集表单值。DOM 读取脚本运行在隔离的执行环境中,显式排除输入框的值、隐藏文本和敏感区域。
  • 文本和属性有上限。采集的文本、属性和尺寸设有上限,防止通过超大负载进行数据外泄。
  • 截图策略保守。包含输入控件或敏感标记的元素会从截图中省略。截图存储在应用私有目录,而非工作区。
  • 不注入系统指令。网页内容作为数据序列化到对话输入中,不能充当系统指令或覆盖 Agent 的行为。

控制与竞态条件

当用户进入选择模式时,浏览器的自动化被暂停。Agent 不能在用户选择元素时进行导航、点击或滚动。控制权仅在选择会话结束且控制版本匹配时才归还——防止上一次选择的过期响应影响当前选择。

如果页面发生了导航、标签页关闭或会话切换,当前选择会被取消。采集到的引用是历史快照:它们在导航后仍保留在对话历史中,但要对同一元素重新执行操作需要重新观察页面并确认元素身份。

Shadow DOM 与 iframe 边界

DOM 读取器支持开放的 Shadow DOM 文本采集。同源 iframe 支持坐标变换。跨域 iframe、封闭的 Shadow DOM 以及 Canvas/视频元素的内部 DOM 无法被提取——系统会显示原因并保留现有草稿。这些边界是强制执行的,不是可配置的。

局限性

  • 无法采集跨域 iframe 或封闭 Shadow DOM 的内容。
  • Canvas 和视频元素仅支持可见区域截图,无法访问内部状态。
  • 选择仅在当前可见区域生效。滚动出视野的内容需要用户先滚动到该位置。
  • 浏览器元素引用不能证明源码文件或组件的所有权——它们是网页数据,不是工作区制品。
  • 基于 CDP 的架构意味着浏览器需要 Chromium 支持,不支持非 Chromium 内核的网页视图。

看见的方式:语义快照而非像素

Semibot 内置浏览器的元素选择不依赖视觉模型读屏。用户指点元素时,Agent 拿到的是一份结构化语义快照:元素的可访问角色、名称与文本、脱敏后的页面地址、采集时间与结构路径,加上一张严格受限的辅助截图(最大 640×480,只保留目标周围少量边距,编码上限 180 KB,含输入控件或敏感区域时保守省略)。选择交互本身经过控制权状态机管理:Agent 进入选择模式前暂停页面自动化,采集请求绑定控制版本与页面版本;页面变化后旧引用只是一张历史快照,再次执行必须重新观察并核对元素身份,旧坐标不构成执行权限。

安全面的设计原则是「网页内容是数据,不是指令」:禁止读取表单值、脚本与隐藏文本;文本与属性采集有长度上限;URL 脱敏移除凭证、查询参数与哈希;截图持久化到应用私有目录并以严格权限保护;渲染进程只拿到快照,拿不到浏览器调试地址或可执行节点句柄——这一条同时是对提示注入的结构性防御。

边界被如实声明:开放 Shadow DOM 可以深入命中,同源 iframe 需要坐标转换,而跨域 iframe、封闭 Shadow DOM、Canvas 与视频内部无法声称取得了 DOM——后两者只支持可见区域截图。工程验证方面,该模块上线时带 141 项桌面回归、50 项样式回归,新采集模块行覆盖率约 93%、分支覆盖约 84%;团队同时明确自评分数不等同于发布评审。

FAQ

Agent 能点击页面上的东西吗?

只能通过显式的浏览器自动化工具,且需要审批。元素选择只采集引用,不会触发页面的点击事件。

Agent 能读取我的密码框吗?

不能。DOM 读取脚本显式排除了输入框的值和敏感区域。

可以选择多个元素吗?

可以。Shift+点击启用多选。每个元素各自生成引用,保留选中顺序。

选中后页面变了怎么办?

采集到的引用是一个快照,它会保留在历史记录中。重新执行操作需要重新观察页面。

相关阅读