数据截至 (上游 commit 7e0457a7cbf8)
Playwright MCP — 架构与原理(总览)
30 秒导读: Playwright MCP 把浏览器自动化框架 Playwright 包成一个 MCP server,让大模型能像调工具一样开网页、点按钮、填表单。它最关键的取舍是:不给模型看截图,给模型看无障碍树快照——一段带
[ref=e2]编号的结构化文本,模型直接引用编号来指定要点哪个元素。还有一个必须先知道的事实:你现在读的这个仓库已经没有核心源码了,它是一个 npm 发行壳,69 个工具的实现全部搬进了 Playwright 主仓,壳靠一行require('playwright-core/lib/coreBundle')把它们引进来。
本页是这组文档的总入口。先讲「这是什么」(零基础)、给顶层全景图、端到端走一遍「一次点击」的主线,再给阅读地图。各机制的细节在后续章节,本页不重复。
1. 这是什么(零基础也能懂)
一句话定义
Playwright MCP = 一个 MCP server,它把「操作浏览器」这件事拆成几十个工具,交给大模型调用;模型看到的页面不是图片,是一棵带编号的文本树。
拆开这句话里的三个词:
- Playwright —— 微软的浏览器自动化框架,能用代码驱动 Chromium / Firefox / WebKit 打开网页、点击、输入、截图。
- MCP(Model Context Protocol) —— 一套标准协议。你写一个 MCP server 暴露若干工具,任何 MCP client(VS Code、Claude、Cursor、Codex……)都能发现并调用它们。
- 无障碍树快照(accessibility snapshot) —— 浏览器本来就为读屏软件维护着一棵语义树:每个可见元素是什么角色(button / link / textbox)、叫什么名字。这里把它序列化成文本喂给模型,代替截图。
README 开篇把这个定位说得很直白(README.md:3):它让 LLM 通过结构化的无障碍快照与网页交互,「绕开截图和视觉调校模型的需要」。
解决谁的什么问题
场景:你让一个 AI agent「帮我去这个网站上把订单状态查出来」。
agent 必须回答两个问题——页面上现在有什么,以及我要操作的那个东西在哪。业界主要有两条路:
| 路线 | 模型看到的 | 定位方式 | 代价 |
|---|---|---|---|
| 截图 / 视觉 | 一张图片 | 模型猜像素坐标 | 需要视觉模型;坐标易错;图片吃 token |
| 无障碍快照(本项目) | 一棵文本树 | 模型引用节点编号 ref=e2 | 需要页面语义可用;树大时也吃 token |
Playwright MCP 选第二条。README 把这条路的好处列成三点(README.md:15-17):快且轻(用无障碍树而非像素输入)、对 LLM 友好(不需要视觉模型)、动作应用是确定性的(避免截图方案常见的歧义)。
它能做什么
默认开箱就有 24 个工具(见 §3 主线),加上按需开启的能力,一共 69 个工具,覆盖:
- 看页面 —— 抓快照、在快照里搜索、截图、读 console、读网络请求。
- 动页面 —— 点击、输入、拖放、选下拉、上传文件、批量填表、按键、处理弹窗。
- 管会话 —— 导航、后退、多标签页、改窗口尺寸、关闭。
- 按需开启 —— 网络 mock、cookie/localStorage 读写、PDF 导出、像素级鼠标动作、录屏与 trace、测试断言。
用起来什么样
绝大多数 MCP client 用同一份配置就能接上(README.md:32-46):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
也可以当成一个独立 HTTP 服务跑(README.md:777-796):
npx @playwright/mcp@latest --port 8931
# 客户端侧只需配 url: http://localhost:8931/mcp
环境要求只有 Node.js 18+(README.md:20)。
一句话直觉
把网页当成一份带行号的大纲,而不是一张照片。 模型读大纲、说「我要动第 e2 行」,server 负责把「第 e2 行」翻译成一次真实点击。整篇文档剩下的内容,都是在讲这份大纲怎么生成、编号怎么保证指得准、以及这个能力怎么被打包发出去。