Logo of LexmountLexmount Browser
试验场价格博客预约演示
GitHubX (Twitter)
Logo of LexmountLexmount Browser
产品 · 工程实践

CAE Protocol:为 AI Agent 重新设计浏览器交互

从 DOM、布局与绘制出发,构建面向 Agent 的页面语义、动作与结果协议。

Logo of LexmountLexmount 浏览器团队
2026/09/1418 分钟阅读
CAE Protocol:为 AI Agent 重新设计浏览器交互

引言

AI Agent 在网页上完成任务,需要先读懂页面,再操作控件,并根据结果决定下一步。它需要知道哪些内容已经显示、哪些控件可以操作,以及一次点击后发生了什么。浏览器在渲染页面和处理交互时,已经掌握了不少这样的信息。

CAE Protocol 的出发点,就是让 Agent 更直接地使用这些信息。它是一套实现在 Chromium 内部的浏览器原生协议,利用浏览器计算好的布局、绘制和控件状态,向 Agent 提供紧凑的页面语义,并把动作执行与结果观察关联起来。

为什么浏览器 Agent 还在“猜”

比如,找到一位联系人的资料,将职位改为高级软件工程师、所在地改为纽约,再确认修改已保存。

完成这项任务,Agent 至少需要知道四件事:

  1. 页面上现在有什么?
  2. 页面是否已经稳定,可以开始操作?
  3. 该操作哪个控件,怎样点击或输入?
  4. 操作之后发生了什么?

截图保留了页面外观,Agent 需要从中识别文字、位置和控件关系,再决定怎样操作。读取页面结构可以直接拿到文本和节点身份,但仍有缺口:DOM 中的节点可能尚未显示,页面文字没变时,浏览器也可能已经开始下载。

现有自动化框架已经有定位器、动作检查和自动等待等能力。CAE Protocol 关注的是如何将浏览器掌握的状态整理成模型能直接使用的信息,并把一次观察、就绪判断、动作执行和结果关联起来。

协议约定了四类信息:

  • Observation(观察):当前渲染状态下,页面有哪些有用的内容和可执行的动作。
  • Readiness(就绪):当前文档是否曾达到协议定义的稳定条件。
  • Action(动作):如何通过浏览器原生的交互和编辑机制执行动作。
  • Effect(结果变化):动作带来了导航、页面变化、焦点变化或下载,还是没有观察到可见结果。

Agent 仍然决定要找什么、点什么,以及结果是否满足任务要求。浏览器负责提供它能观察到的事实。

协议如何组织一次交互

一次交互通常按这个顺序进行:

读取页面 → 选择动作节点 → 执行动作 → 获取变化 → 按需重新观察

这里用到三个接口:Page.getAIPageContent 读取页面,Page.performDOMAction 执行动作,Page.getAIPageActionChanges 获取动作后的变化。客户端通过 Chromium 的调试协议 CDP 调用它们。

这些信息来自两个地方。渲染进程负责页面内容、控件状态和交互,浏览器进程负责导航、新标签页和下载。协议将两侧的观察关联起来,让 Agent 能查到一次动作在页面内外产生的结果。

Observation:从渲染结果中提取可行动语义

先理解 DOM、Layout 和 Paint 的区别

DOM 描述文档结构,例如一个标题、一段文字和一个按钮属于同一个容器。它记录内容与节点的关系,但仅凭这些结构,还不知道文字会在哪里换行、元素占多大面积,以及哪些内容会被挡住。

Layout(布局)结合样式,计算内容的大小、位置和换行。DOM 节点与最终布局并非一一对应:隐藏元素可能不参与布局,一段文字也可能排成多行。

同一组 DOM 节点映射到页面布局:隐藏节点没有布局对象,display:contents 容器不生成自己的盒,文字节点分成多个行片段,并随容器变窄重新换行。

图 1:同一份文档结构会随样式和容器宽度形成不同布局,同色对象表示相同的内容来源。

Paint(绘制)确定背景、文字和前景内容的绘制顺序,判断遮挡时就会用到这些信息。到了这一步,内容之间的结构关系仍然保留着,还没有变成截图中的像素。

CAE Protocol 会用到这三层信息:从 DOM 获取内容与身份,从 Layout 获取位置与排版,再借助 Paint 判断遮挡。读取前,协议会更新布局和绘制状态,尽量避免把新内容与旧位置混在一起。

过滤确定不可见的内容,保留不确定的信息

提取文本、控件和动作信息时,CAE Protocol 会先过滤没有有效显示区域、样式不可见或完全透明的内容,再结合绘制顺序判断遮挡。

遮挡判断比较保守。只有能确定内容被后绘制的不透明区域完整覆盖,协议才会剔除它。遇到半透明、部分覆盖或复杂视觉效果,无法确定是否被完全遮挡时,就保留相关内容。

覆盖物滑到按钮上方后,完整不透明覆盖使候选退出;覆盖物变为半透明或只覆盖部分区域时,按钮候选被保留。

图 2:在覆盖物静止、没有动画等不确定因素时,完整不透明覆盖会使目标被剔除;半透明或部分覆盖则保留目标。

这份输出保留了无法确定是否被遮挡的内容,因此可能与肉眼看到的页面有所不同。这样可以减少误删有用信息的情况。

滚动可达性:观察不必改变滚动位置

当前屏幕通常只显示文档的一部分。如果每次读取屏幕外的内容都要先滚动页面,就可能触发滚动事件、懒加载或虚拟列表更新。只是想看看页面,却改变了页面状态。

CAE Protocol 会判断已经渲染的内容能否通过正常滚动到达,并在读取时保留这些信息,无需改变滚动位置。判断仍受页面自身的裁剪规则限制。

这个范围只包括已渲染的内容。尚未生成的虚拟列表项、未加载的数据都不在其中。返回的节点可能分布在不同滚动位置,无法同时出现在一张截图里。

压缩结构,保留内容与动作的关系

网页为了布局和样式,常常嵌套多层容器。CAE Protocol 会折叠没有独立含义的包裹层,合并属于同一内容的文字片段,并将按钮名称直接放在按钮节点上。这能减少 Agent 需要读取的上下文。

布局中的包裹层收拢消失,两个文字行片段合入一个文本节点,按钮吸收内部文字,最终形成保留内容层级和动作的语义树。

图 3:合并文字片段、折叠冗余容器后,语义树仍保留必要的内容层级与动作。

压缩时,协议会保留表格层次、业务分组,以及内容与操作按钮之间的关系。例如,同一张卡片里的文字和“编辑”按钮必须保持关联,否则 Agent 就可能改错对象。

输入框、文本域和下拉框采用统一的表示方式,返回名称、实时值、选项和可用动作,省去浏览器内部的控件结构。部分未显示的输入控件也可能返回表单信息,所以读到一个字段后,还要确认它当前能否操作。

默认输出省略坐标、调试信息和空字段;需要链接地址等信息时,可以按需请求。

简化后的返回结果如下:

{
  "url": "https://example.test/reports",
  "ready": true,
  "content": {
    "role": "main",
    "children": [
      {"role": "heading", "text": "资料中心"},
      {"text": "页面内容会随着容器\n宽度自动换行"},
      {"id": 42, "role": "button", "text": "查看报告", "action": ["click"]}
    ]
  }
}

这里的 42 是临时节点 ID,供本次观察后的动作使用。页面导航、显著重建或节点失效后,需要重新读取页面。这个 ID 不能用作长期有效的业务标识。

Readiness:判断文档是否曾达到稳定条件

页面加载完成后,异步组件可能还没准备好,后台请求也可能一直持续。固定等待几秒很难兼顾不同页面:快页面白等,慢页面又可能等得不够。

CAE Protocol 会结合网络活动、页面结构变化和待执行脚本等信号,判断文档是否在一段时间内达到稳定条件。慢资源也有等待上限,避免就绪判断一直卡在单个资源上。

ready=true 表示当前文档曾经达到过协议定义的稳定条件。这个值在同一文档内会保持为真,后续局部更新不会让它自动变回 false;文档被替换或重新打开后才重新判断。

Readiness 可以帮助选择观察时机,但不能保证业务数据已经出现,也不能说明页面此刻完全静止。Agent 还要检查任务所需的内容,例如联系人表单是否已经加载。

Action:在浏览器内部执行并重新验证目标

Agent 将观察中的节点 ID 和动作类型交给 Page.performDOMAction,例如 {"id":42,"action":"click"}。执行时,浏览器会重新解析并验证节点,检查之前读到的目标是否仍然可用。

CAE Protocol 当前支持六类动作:

↔横向滑动查看全部
动作主要用途
click点击按钮、链接和控件
input在输入框、文本域或受支持的可编辑区域填写文本
input_submit输入文本并提交表单
hover触发悬停菜单、提示等状态
press_key发送 Enter、方向键或快捷键
select选择原生下拉框中的单个或多个选项

动作会复用浏览器原生的交互和编辑机制。以输入为例,除了修改字段值,还要触发相应的编辑事件,页面才有机会进行校验或更新状态。

从观察到执行,页面可能已经发生变化。浏览器会在执行时检查目标是否还存在、是否禁用或只读,以及是否满足对应动作的条件。如果页面取消了编辑,协议也会遵循这一结果。

这些动作使用原生交互机制,但与真实硬件输入仍有区别,也不能保证支持所有自定义控件。某些点击路径允许向初始被遮挡的目标分发事件,所以协议报告点击成功时,真人鼠标未必能点到它。

Effect:把页面内外的变化归入同一次动作

performDOMAction 返回 ok=true,只说明动作分发过程成功运行了。Agent 还需要知道这次操作带来了什么变化。

CAE Protocol 会比较动作前后的页面状态,结合浏览器侧的观察,返回导航、新标签页、页面内容、字段值、焦点或下载等变化。如果未发现变化或动作失败,也会在结果中报告。

例如,点击“下载报告”后,页面文字可能完全没变,但浏览器已经检测到下载。协议可以将下载归入本次动作,Agent 就有了页面文字之外的判断依据。

Effect 返回变化类型与相关状态,不一定包含完整的内容差异。要知道页面具体改了什么,还得重新读取页面。客户端需要先为预期变化留出等待时间,再获取本次动作的结果。每次动作的结果只消费一次,不能反复读取来持续轮询。

业务结果需要单独确认:download 不证明文件已经下载完成,no_op 也不证明服务器没有处理请求。回到修改联系人的例子,Agent 最后还要确认职位和所在地已经保存。

把协议接进 Agent 工作流

只要客户端能够发送自定义 CDP 命令,就可以连接 CAE Protocol 浏览器,直接调用这些接口。配套的参考客户端负责管理连接和动作顺序,也提供了减少模型与浏览器往返的能力。

先明确操作的页面,再按顺序观察和执行。 参考客户端用 Target ID 标识目标,避免把不同页面的观察和动作混在一起。一次内容读取不会自动汇总所有 iframe 子页面;如果要操作可独立连接的子页面,需要切换到对应目标,再重新观察。

将已经确定的连续动作一起提交。 例如,联系人表单中的职位、所在地和保存按钮都已明确,就可以依次填写两个字段,再点击保存,省去逐步调用的开销。会导航或重建页面的动作应放在最后。如果后续操作依赖新状态,就要先重新观察。

批量动作按顺序执行,遇到失败就停止,已经完成的操作不会回滚。因此,失败后不能直接整批重试。返回的 Effect 对应最后执行的动作,各步的执行结果会另行保留;整个任务是否完成,要看最终页面状态。

只把任务需要的信息交给模型。 参考客户端还可以把语义树转成大纲,或只保留任务相关的节点与字段。修改联系人时,交给模型的内容就可以集中在资料表单上,减少无关导航占用的上下文。

性能数据:更少的推理轮数与 Token 成本

评测设置

本轮评测比较 CAE Protocol、Browser Use 和 agent-browser 三种完整的 Agent 工作流,覆盖消息发送、表单更新、内容编辑和跨页面状态操作等 10 项结构化 Web 任务。每项任务、每种方案选取一份运行记录,共 30 条轨迹。三组使用相同的任务定义、gpt-5.6-sol 模型和 medium 推理档位,推理轮数按模型响应次数统计。

总体结果

CAE Protocol、Browser Use 和 agent-browser 的推理轮数、Token 与估算成本对比

本轮三组结果中,CAE Protocol 的推理轮数、总 Token 用量和估算成本都最低。CAE Protocol、Browser Use 和 agent-browser 的推理轮数分别为 158、200 和 188 轮。与 Browser Use 和 agent-browser 相比,CAE Protocol 的推理轮数分别减少 21.0% 和 16.0%,估算成本分别减少 19.8% 和 29.2%。图中数值经过四舍五入,降幅按原始精确值计算。

结果分析与边界

语义观察将控件状态、可用动作和页面就绪信息放在一起,供 Agent 直接读取。已确定的动作可以批量提交,动作后的观察也可以限定范围,这些机制都有助于减少模型往返。本轮的推理轮数和输入 Token 确实更少,但评测比较的是完整工作流,无法单独判断每项能力贡献了多少。

找到按钮后,还要确认它对应的是哪个业务对象。保留正文、层级和操作按钮之间的关系,有助于做这个判断。如果页面语义里缺少对象身份,使用 CAE Protocol 的 Agent 也可能需要多次观察和导航才能找到目标。这部分往返仍有优化空间。

这组数据来自模拟应用,每项任务、每种方案只选取一个样本,尚未固定模型快照,也没有进行随机交错的重复实验。初始化偏差和应用状态都会影响方案之间的比较。目前的结果只能说明这些完整工作流在本轮环境中的表现,收益能否稳定复现,还需要在统一条件下重复评测。

什么时候仍然需要视觉

CAE Protocol 适合结构、状态和操作语义比较明确的页面。表单密集的企业应用、多步骤内容管理、运营后台、项目看板和支付流程,都需要反复读取控件状态、填写字段、执行动作并检查结果。由浏览器直接提供这些信息,可以省去一部分从像素或站点脚本中还原状态的工作。

跨多个页面和窗口的任务也可以用到这些能力。需要确认导航、下载、新窗口或页面内变化时,Agent 可以通过 Observation、Action 和 Effect 获取相关信息,减少从截图、DOM 探针、等待逻辑和后续验证中单独拼接信息的工作。

Canvas 绘图、地图、游戏、远程桌面和图片编辑器则经常需要判断像素内容。颜色、造型、相对位置或整体构图无法仅靠语义树表达时,仍要使用截图和视觉模型。语义树可以补充部分结构信息,但无法替代这些视觉判断。

实际接入时,可以先用 CAE Protocol 读取结构化状态、执行动作,遇到语义树无法表达的内容,再补充截图和视觉判断。这样仍能处理依赖视觉的界面,也能减少普通表单和按钮操作中的图像理解开销。

结语

浏览器 Agent 过去常常站在页面之外工作:先猜页面现在是什么状态,再猜哪个元素能够操作,最后还要猜一次动作究竟带来了什么。截图和 DOM 脚本都能完成任务,但它们把大量本应由浏览器回答的问题留给了模型。

CAE Protocol 做的是另一种选择:从已经完成布局和绘制的页面中提取可行动语义,用明确的稳定条件为观察时机提供依据,让动作进入浏览器原生交互管线,再以 Effect 返回浏览器真正观察到的结果。Agent 仍然负责理解目标和做出业务决策,浏览器则负责把事实说清楚。

我们希望浏览器能把已经掌握的页面状态直接交给 Agent:哪些内容可用,动作能否执行,执行后观察到了哪些变化。CAE Protocol 围绕这些问题组织接口,任务目标和业务结果仍由 Agent 判断。

真正的目标,不是让 AI Agent 更像人一样辛苦地操作浏览器,而是让浏览器成为 AI 可以直接理解、执行和验证的环境。

引言为什么浏览器 Agent 还在“猜”协议如何组织一次交互Observation:从渲染结果中提取可行动语义先理解 DOM、Layout 和 Paint 的区别过滤确定不可见的内容,保留不确定的信息滚动可达性:观察不必改变滚动位置压缩结构,保留内容与动作的关系Readiness:判断文档是否曾达到稳定条件Action:在浏览器内部执行并重新验证目标Effect:把页面内外的变化归入同一次动作把协议接进 Agent 工作流性能数据:更少的推理轮数与 Token 成本评测设置总体结果结果分析与边界什么时候仍然需要视觉结语
Logo of Lexmount

产品

  • 云浏览器 API
  • 网页内容提取 API
  • 开始使用
  • 模板

资源

  • 高校活动
  • 帮助中心
  • 博客
  • 文档
  • 更新日志
  • 服务状态

公司

  • 关于我们
  • 邮件订阅
  • Cookie政策
  • 浏览器数据处理说明

联系

  • 联系我们
  • GitHub
  • Discord 社群
  • 隐私政策
  • 退款政策
  • 服务条款