Playwright
Playwright 的优点是:支持渐进式学习,支持多种语言,支持多种浏览器,支持多种操作系统,并且浏览器相关的技术半衰期很长,有大厂背书更新积极。
Playwright 原本是个测试框架,现在接到 Agent 工作流里,用于导航页面、填写表单和整理个人信息非常方便。
Playwright 的官方文档非常详细,本篇文档从使用者的角度,总结 Playwright 的架构、接口特性、数据提取方式等。
技术架构
浏览器三层对象模型速记
由重到轻:Browser → BrowserContext → Page,新建成本依次降低,隔离粒度依次细化。
| 层级 | 对应概念 | 隔离粒度 | 创建成本 | 典型用法 |
|---|---|---|---|---|
| ① Browser | 浏览器进程 | 进程级 | 高(秒级) | 一次 launch / connect 得到一个,多个用例共用 |
| ② BrowserContext | 会话 / 无痕窗口 | Cookie · Storage · 权限 · UA · 视口 | 低(毫秒级) | 每个测试用例新建一个,互不污染 |
| ③ Page | 标签页 / 弹窗 | DOM · 网络事件 · Frame 树 | 极低 | 一个 Context 下可开多个;popup 也是新 Page |
Page 内部的 iframe 由 Frame 树管理,不再是独立顶层对象。
从 Python / Java / CLI / MCP 任一入口调用时,真正执行协议交互与自动化逻辑的仍是 Playwright 的核心实现。
开发者通过 Python / Java / .NET 等 API 控制浏览器,但这并不意味着每种语言都重写了一套自动化引擎。
不同语言提供的仅仅是绑定层(Binding)。
CLI 命令行工具
像 codegen(录制代码)、show-trace(调试追踪)等命令行能力,同样建立在这套核心实现之上。
Driver 与多语言绑定
Python、Java、.NET 等绑定在底层共用同一套 TS 核心:
- 多语言绑定会调用 Playwright 的 Driver 进程,由该进程负责与浏览器底层通信。
- 语言层只负责暴露各自生态的 API 形态,并将调用请求转交给底层处理。
- 浏览器交互、协议适配与自动化执行,全部由 Playwright 核心实现包揽。