Playwright MCP
这是一个 Model Context Protocol (MCP) 服务器,利用 Playwright 提供浏览器自动化功能。它使 LLM(大语言模型)能够通过结构化的辅助功能快照与网页交互——无需视觉模型。
示例
You: Navigate to https://demo.playwright.dev/todomvc and add "Buy groceries".
→ browser_navigate { url: "https://demo.playwright.dev/todomvc" }
→ browser_snapshot
- heading "todos" [level=1]
- textbox "What needs to be done?" [ref=e5]
→ browser_type { ref: "e5", text: "Buy groceries", submit: true }
→ browser_snapshot
- heading "todos" [level=1]
- textbox "What needs to be done?" [ref=e5]
- listitem:
- checkbox "Toggle Todo" [ref=e10]
- text: "Buy groceries"
- contentinfo:
- text: "1 item left"
LLM 读取辅助功能快照,找到如 e5 之类的元素引用,并使用它们进行交互——例如点击按钮、填写表单、勾选复选框。无需屏幕截图或猜测坐标。
主要特性
- 基于快照 — 基于辅助功能树(accessibility tree)操作,而非像素。每个交互元素都有唯一的引用,确保交互的确定性
- LLM 友好 — 结构化的文本输出,便于 LLM 自然解析,每个快照约 200-400 tokens,远少于 DOM 或截图所需的数千 tokens
- 跨浏览器 — 支持 Chrome、Firefox、WebKit 和 Edge
- 全面自动化 — 40+ 种工具,涵盖导航、表单、网络模拟、存储、追踪、视频录制等
- 持久化会话 — 默认在会话间保留登录状态和 Cookie
- 兼容广泛 — 支持 VS Code、Cursor、Windsurf、Claude Code、Claude Desktop 以及任何 MCP 客户端
快速开始
将此服务器添加到您的 MCP 客户端
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
浏览器默认以有头模式(headed mode)启动,以便您观察操作过程。请参阅安装部分了解特定客户端的配置。
Playwright MCP 与 Playwright CLI 的区别
| MCP | Playwright CLI | |
|---|---|---|
| 最适合 | 专门的智能代理循环、探索性自动化 | 处理大型代码库的编码代理(如 Claude Code, Copilot) |
| 工作原理 | LLM 使用结构化参数调用 MCP 工具 | 代理运行 Shell 命令 |
| Token 成本 | 更高 — 上下文包含工具模式 + 快照 | 更低 — 简洁的 CLI 输出,按需加载技能 |
| 默认模式 | 有头模式 | 无头模式 |
| 安装设置 | MCP 客户端中的 JSON 配置 | npm install -g @playwright/cli |
可用工具
核心
| 工具 | 描述 |
|---|---|
browser_navigate | 导航至指定 URL |
browser_navigate_back | 在历史记录中后退 |
browser_navigate_forward | 在历史记录中前进 |
browser_reload | 刷新页面 |
browser_snapshot | 捕获辅助功能快照 |
browser_click | 通过引用点击元素 |
browser_hover | 悬停在元素上 |
browser_drag | 元素间拖放 |
browser_type | 向元素输入文本 |
browser_fill_form | 一次性填充多个表单字段 |
browser_select_option | 选择下拉菜单选项 |
browser_check | 勾选复选框或单选按钮 |
browser_uncheck | 取消勾选复选框 |
browser_press_key | 按键(回车、Tab 等) |
browser_take_screenshot | 截取 PNG/JPEG 图片 |
browser_tabs | 列出、创建、关闭、切换标签页 |
browser_handle_dialog | 接受或关闭对话框 |
browser_file_upload | 上传文件 |
browser_close | 关闭浏览器 |
browser_resize | 调整浏览器窗口大小 |
browser_wait_for | 等待文本、元素出现或等待一段时间 |
网络与存储
| 工具 | 描述 |
|---|---|
browser_network_requests | 列出网络请求 |
browser_route | 模拟网络请求 |
browser_route_list | 列出已激活的模拟路由 |
browser_unroute | 移除模拟路由 |
browser_cookie_list/get/set/delete/clear | 管理 Cookies |
browser_localstorage_list/get/set/delete/clear | 管理 localStorage |
browser_storage_state | 保存 Cookie + localStorage 到文件 |
browser_set_storage_state | 恢复保存的状态 |
测试与调试
| 工具 | 描述 |
|---|---|
browser_run_code | 执行 Playwright 代码片段 |
browser_evaluate | 在页面上执行 JavaScript |
browser_console_messages | 获取控制台输出 |
browser_generate_locator | 为测试生成 Playwright 定位器 |
browser_verify_element_visible | 断言元素是否可见 |
browser_verify_text_visible | 断言文本可见 |
browser_start_tracing / browser_stop_tracing | 记录执行链路 |
browser_start_video / browser_stop_video | 录制会话视频 |
browser_pdf_save | 将页面导出为 PDF |
视觉(可选)
| 工具 | 描述 |
|---|---|
browser_mouse_move_xy | 将鼠标移动到指定坐标 |
browser_mouse_down / browser_mouse_up | 鼠标按键按下/释放 |
browser_mouse_wheel | 使用鼠标滚轮滚动 |