问题域/PD-273

浏览器自动化抽象层

Browser Automation Abstraction

封装 CDP 协议差异,提供跨引擎(Playwright/Puppeteer)的统一浏览器操作接口

子问题

1.多引擎 Page/Frame 统一

2.CDP WebSocket 连接管理

3.跨 iframe 元素定位

4.浏览器生命周期管理

5.OOPIF 子 session 收养与事件桥接

6.Root swap 时 frame id 原子性迁移

7.远程浏览器文件上传的 base64 payload 注入

8.initScript 跨 session 重放一致性

各项目的解法1 solutions

Signals

横向对比

维度Stagehand
引擎抽象层级完全绕过引擎 API,基于 CDP WebSocket 直连自建 Page/Frame/Locator
Session 管理CdpConnection 单 WebSocket 多路复用,inflight Map 追踪 + 自动 OOPIF 收养
Frame 拓扑FrameRegistry 双向映射(frame↔session),支持 root swap 和子树递归清理
跨 iframe 定位DeepLocator 支持 >> 跳转语法 + XPath iframe 步骤自动穿透
元素操作策略objectId 驱动(非 nodeId),每次操作重新解析 selector
输入事件合成CDP Input domain 直接合成,支持流水线化点击和带错误打字模拟
远程浏览器支持区分本地/远程模式,远程文件上传通过 base64 payload 注入页面

最佳实践

1.基于 CDP 直连而非引擎 API 实现底层操作

2.使用 objectId 而非 nodeId 驱动元素操作以避免 DOM 变更后失效

3.FrameRegistry 双向映射(frame→session + session→frames)保持拓扑一致性

4.输入事件流水线化发送减少网络延迟对交互的影响