
![]()
AIPex 最新发布了新版本,其中最重要的能力之一,是浏览器任务可以在后台运行,而不打断用户的正常工作流。
这一能力并非来自某个“技巧”,而是源于一个明确的工程选择: 我们有意识地避免将浏览器控制建立在 debugger ( Chrome DevTools Protocol )之上。
本文将解释为什么主流方案普遍选择 debugger ,以及 AIPex 为什么在多数智能代理与日常自动化场景中,选择了一条不同的路线。
在当前无需迁移的浏览器自动化插件或 Agent 中,常见方案包括:
这些方案通常基于 Chrome DevTools Protocol ( CDP ),尤其是其 debugger 能力来实现浏览器控制,原因并不复杂:
CDP 提供了浏览器内部几乎所有关键能力,包括:
对于复杂自动化而言,CDP 是一个“开箱即用”的全能力接口。
通过 CDP ,可以直接获取浏览器构建的 Accessibility Tree:
因此,AXTree 成为了许多 AI Agent 的主要页面表达形式。
围绕 CDP 已经形成成熟工具链:
尽管 CDP 能力强大,但在“与用户并行工作的桌面场景”中,它也带来了一些难以忽视的问题。
CDP 并非以“后台无打扰”为设计目标。
在真实桌面环境中:
结果是: 当用户正在使用其他应用或标签页时,自动化任务可能打断其当前操作,严重影响体验。
使用 CDP 通常意味着:
在企业环境或多浏览器生态中,这种耦合会显著增加部署与维护成本。
调试端口、进程权限、证书配置等问题,在企业与受管环境中常常触发:
这类问题并非技术不可解,而是部署摩擦成本过高。
AIPex 的核心设计目标是:
让浏览器任务像“背景思考”一样运行,而不是像“远程操控”一样打断用户。
为此,我们选择了一条不以 debugger 为中心的路径。
在页面侧,AIPex 采用纯 Javascript / TypeScript 能力,实现:
而不是依赖 CDP 的 AXTree 与调试通道。
AIPex 基于 @aipexstudio/dom-snapshot:
该库在 README 中明确说明: 它是一个纯 DOM 方案,而非 CDP 的替代封装。
自动为页面元素生成稳定的:data-aipex-nodeid
这使得:
语义快照优先关注:
并过滤:
display: nonevisibility: hiddenaria-hiddeninert从而避免将无意义或不可见节点暴露给 Agent 。
快照可被转换为可朗读、可搜索的文本形式( TextSnapshot ):
→uid=dom_abc123 RootWebArea "My Page" <body> uid=dom_def456 button "提交" <button> uid=dom_ghi789 textbox "邮箱" <input> desc="请输入邮箱" StaticText "欢迎回来" *uid=dom_jkl012 link "了解更多" <a> 其中:
→ 表示焦点祖先
该表示既适合 TTS / 语音播报,也支持自然语言驱动的检索。
searchSnapshotText(formatted, '登录 | Login | Sign In'); searchSnapshotText(formatted, 'button* | *submit*', { useGlob: true, contextLevels: 2 }); 命中的文本行可通过 data-aipex-nodeid 精确映射回 DOM 元素。
交互通过页面侧事件完成(如 click 、focus 、input ):
通过内容脚本或扩展消息通道触发
与后台任务调度通信
无需调试端口
不强制拉起前台窗口
在浏览器自动化与 AI Agent 场景中,最常被用作页面表达的主要有两类:
来源:浏览器原生文档对象模型
特点:信息完整但冗余,语义弱
直接使用不利于 AI 理解与操作
来源:ARIA 语义派生
特点:高度语义化
局限:
-节点信息并不完备
在实践中,如果完全依赖 AXTree ,Agent 的“感知能力”往往受限于目标网站的可访问性水平这在现实 Web 中并不理想。
通过对 DOM Tree 进行语义化处理,AIPex 在不依赖 debugger 的前提下,实现了:
后台运行、不打断用户
更完整的页面信息表达
需要说明的是:
对于涉及浏览器特权能力的场景(如网络拦截、性能采样、权限弹窗、文件系统访问等),CDP 仍然具有不可替代的价值。
AIPex 并非否定 debugger ,而是在日常自动化与智能代理场景中,优先选择对用户体验更友好的工程解法。
1 sunorg 2 天前 via Android 通过 CDP ,可以直接获取浏览器构建的 Accessibility Tree 很好奇还是通过 cdp 的渠道去获取了 dom? |
| div class="fr"> 2 ropzislaw OP @sunorg Accessibility Tree 一定需要通过 CDP 拿到,而 dom 可以通过 content script 拿到。content script 是在页面加载时,浏览器插件可以注入的一段 js 程序 |
3 beiluo 2 天前 如果在云电脑端,不存在打断用户操作的情况下,直接使用 debugger 模式效率会更高吗? 这个有没有对比过? |