浏览器自动化抽象层
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.输入事件流水线化发送减少网络延迟对交互的影响