Playwright MCP Server - Microsoft 官方浏览器自动化工具

Playwright MCP Server - Microsoft 官方浏览器自动化工具

Microsoft 官方实现 | Stars: 21600 | TypeScript | Apache-2.0

概述

Playwright MCP Server 是 Microsoft 官方提供的浏览器自动化工具,基于 Model Context Protocol 实现。它采用可访问性树(Accessibility Tree)技术,提供快速、精确的浏览器自动化能力。

与传统基于截图的自动化方案不同,Playwright MCP 使用结构化数据直接操作浏览器,无需视觉模型进行图像识别,实现了更快的响应速度和更高的准确性。该工具已内置于 GitHub Copilot Coding Agent,可以在开发过程中实时验证代码改动的效果。

支持 Chromium、Firefox、WebKit 三大浏览器引擎,提供 20 个核心工具覆盖导航、交互、表单、截图、JavaScript 执行等全方位自动化需求。特别适合 AI 辅助测试、Web 数据采集、表单自动化等场景。

核心特性

  • Microsoft 官方实现,与 Playwright 深度集成
  • 🚀 基于可访问性树,无需截图和视觉模型
  • 🎯 确定性执行,操作精确可靠
  • 🌐 跨浏览器支持(Chromium、Firefox、WebKit)
  • 🛠️ 20 个核心工具,覆盖全面自动化场景
  • 📊 支持 JavaScript 执行,灵活扩展能力
  • 🔌 内置于 GitHub Copilot,无缝集成开发流程
  • 💻 多 IDE 支持(VS Code、Cursor、Windsurf 等)

工具列表

1. browser_navigate

功能:导航到指定 URL

参数

  • url (string, 必需) - 要导航到的网页地址

示例

1
2
3
{
"url": "https://example.com"
}

2. browser_navigate_back

功能:返回上一页

参数:无

示例

1
{}

3. browser_click

功能:点击页面元素

参数

  • element (string, 必需) - 要点击的元素描述
  • ref (string, 必需) - 元素的精确引用
  • doubleClick (boolean, 可选) - 是否执行双击操作
  • button (string, 可选) - 鼠标按钮类型(left/right/middle)
  • modifiers (array, 可选) - 键盘修饰键(如 Shift, Ctrl)

示例

1
2
3
4
5
6
{
"element": "Submit button",
"ref": "button[type='submit']",
"doubleClick": false,
"button": "left"
}

4. browser_type

功能:在可编辑元素中输入文本

参数

  • element (string, 必需) - 输入元素的描述
  • ref (string, 必需) - 元素的精确引用
  • text (string, 必需) - 要输入的文本内容
  • submit (boolean, 可选) - 输入后是否提交
  • slowly (boolean, 可选) - 是否逐字符缓慢输入

示例

1
2
3
4
5
6
7
{
"element": "Search input",
"ref": "input[name='search']",
"text": "Playwright automation",
"submit": true,
"slowly": false
}

5. browser_fill_form

功能:填充表单的多个字段

参数

  • fields (array, 必需) - 表单字段数组,每个字段包含 element、ref 和 value

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"fields": [
{
"element": "Username",
"ref": "input[name='username']",
"value": "john_doe"
},
{
"element": "Email",
"ref": "input[name='email']",
"value": "[email protected]"
}
]
}

6. browser_select_option

功能:在下拉列表中选择选项

参数

  • element (string, 必需) - 选择元素的描述
  • ref (string, 必需) - 元素的精确引用
  • values (array, 必需) - 要选择的值数组

示例

1
2
3
4
5
{
"element": "Country selector",
"ref": "select[name='country']",
"values": ["US"]
}

7. browser_hover

功能:悬停在指定元素上

参数

  • element (string, 必需) - 要悬停的元素描述
  • ref (string, 必需) - 元素的精确引用

示例

1
2
3
4
{
"element": "Menu item",
"ref": ".menu-item:first-child"
}

8. browser_drag

功能:执行拖放操作

参数

  • startElement (string, 必需) - 起始元素描述
  • startRef (string, 必需) - 起始元素引用
  • endElement (string, 必需) - 目标元素描述
  • endRef (string, 必需) - 目标元素引用

示例

1
2
3
4
5
6
{
"startElement": "Draggable item",
"startRef": ".draggable",
"endElement": "Drop zone",
"endRef": ".dropzone"
}

9. browser_press_key

功能:按下键盘按键

参数

  • key (string, 必需) - 要按下的键名(如 Enter, Tab, Escape)

示例

1
2
3
{
"key": "Enter"
}

10. browser_file_upload

功能:上传文件

参数

  • paths (array, 可选) - 要上传的文件路径数组

示例

1
2
3
{
"paths": ["/path/to/file1.pdf", "/path/to/file2.jpg"]
}

11. browser_snapshot

功能:获取当前页面的可访问性树快照

参数:无

示例

1
{}

12. browser_take_screenshot

功能:截取页面截图

参数

  • type (string, 可选) - 图片格式(默认: png)
  • filename (string, 可选) - 保存截图的文件名
  • element (string, 可选) - 要截图的元素描述(针对性截图)
  • ref (string, 可选) - 元素的精确引用
  • fullPage (boolean, 可选) - 是否截取整个可滚动页面

示例

1
2
3
4
5
{
"type": "png",
"filename": "screenshot.png",
"fullPage": true
}

13. browser_evaluate

功能:在页面或元素上执行 JavaScript 代码

参数

  • function (string, 必需) - 要执行的 JavaScript 函数
  • element (string, 可选) - 执行脚本的元素描述
  • ref (string, 可选) - 元素的精确引用

示例

1
2
3
4
5
{
"function": "document.title",
"element": null,
"ref": null
}

14. browser_wait_for

功能:等待指定时间或文本出现/消失

参数

  • time (number, 可选) - 等待的秒数
  • text (string, 可选) - 等待出现的文本
  • textGone (string, 可选) - 等待消失的文本

示例

1
2
3
{
"text": "Loading complete"
}

15. browser_handle_dialog

功能:处理浏览器对话框(alert/confirm/prompt)

参数

  • accept (boolean, 必需) - 是否接受对话框
  • promptText (string, 可选) - prompt 对话框的输入文本

示例

1
2
3
4
{
"accept": true,
"promptText": "User input"
}

16. browser_console_messages

功能:获取浏览器控制台消息

参数

  • onlyErrors (boolean, 可选) - 是否只返回错误消息

示例

1
2
3
{
"onlyErrors": true
}

17. browser_network_requests

功能:获取页面的网络请求记录

参数:无

示例

1
{}

18. browser_resize

功能:调整浏览器窗口大小

参数

  • width (number, 必需) - 窗口宽度(像素)
  • height (number, 必需) - 窗口高度(像素)

示例

1
2
3
4
{
"width": 1920,
"height": 1080
}

19. browser_close

功能:关闭当前页面

参数:无

示例

1
{}

配置方式

Claude Desktop 配置

claude_desktop_config.json 中添加:

1
2
3
4
5
6
7
8
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}

VS Code 配置

在 VS Code 的 MCP 设置中添加:

1
2
3
4
5
6
7
8
{
"mcp.servers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}

Cursor 配置

在 Cursor 设置中添加相同的配置:

1
2
3
4
5
6
7
8
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}

NPX 直接使用

1
npx @playwright/mcp@latest

Docker 部署

1
2
3
docker run -it \
-v /path/to/config:/config \
playwright-mcp

使用场景

1. AI 辅助端到端测试

自动化生成和执行浏览器测试用例。

示例流程

  1. 使用 browser_navigate 访问测试页面
  2. 使用 browser_fill_form 填写表单
  3. 使用 browser_click 提交表单
  4. 使用 browser_wait_for 等待结果
  5. 使用 browser_snapshot 验证页面状态

2. Web 数据采集

高效抓取动态网页数据。

示例流程

  1. 导航到目标网站
  2. 处理登录流程(如需要)
  3. 执行 JavaScript 提取数据
  4. 获取网络请求记录
  5. 保存数据到本地

3. 表单自动化

批量填写和提交表单。

示例流程

  1. 读取待填写数据列表
  2. 对每条数据执行表单填写
  3. 截图保存填写结果
  4. 提交并验证成功

4. UI 交互验证

实时验证前端功能实现。

示例流程

  1. 访问开发环境页面
  2. 执行交互操作(点击、输入等)
  3. 获取控制台消息检查错误
  4. 截图对比 UI 变化

5. 网站监控

定期检查网站状态和内容变化。

示例流程

  1. 定时访问目标网站
  2. 检查关键元素是否存在
  3. 截图保存当前状态
  4. 对比历史数据发现变化

6. GitHub Copilot 开发辅助

在代码编写过程中实时验证改动效果。

示例流程

  1. 修改前端代码
  2. 自动刷新浏览器页面
  3. 执行预定义的交互测试
  4. 显示测试结果和错误信息

技术架构

可访问性树技术

1
2
3
网页 DOM → 可访问性树 → 结构化数据 → MCP 工具

AI 模型 ← 精确的元素引用 ← 语义化的元素描述

与传统方案对比

特性 Playwright MCP 截图方案 Selenium
响应速度 极快
准确性
资源占用
视觉理解 不需要 必需 不需要
AI 友好性
确定性

支持的浏览器

  • Chromium - Chrome、Edge、Brave 等
  • Firefox - Firefox 浏览器
  • WebKit - Safari 浏览器引擎

与其他 MCP 服务器对比

特性 Playwright MCP Puppeteer MCP Browserbase MCP
官方支持 ✅ Microsoft ❌ 社区 ✅ Browserbase
可访问性树 ✅ 原生支持 ❌ 无 ✅ 支持
跨浏览器 ✅ 三大引擎 ❌ 仅 Chromium ✅ 多浏览器
工具数量 20 个 15 个 12 个
GitHub Stars 21600 5000 3200
适用场景 全面自动化 Chrome 专用 云端测试

最佳实践

1. 优化元素选择

1
2
3
4
5
6
7
8
9
10
11
// 推荐:使用语义化描述
{
"element": "Login button",
"ref": "button[aria-label='Login']"
}

// 避免:使用不稳定的选择器
{
"element": "Button",
"ref": "div > div > button:nth-child(3)"
}

2. 合理使用等待

1
2
3
4
5
6
7
8
9
// 推荐:等待特定文本
{
"text": "Data loaded successfully"
}

// 避免:固定时间等待
{
"time": 5
}

3. 错误处理

1
2
3
4
5
6
7
8
// 在关键操作前获取控制台消息
browser_console_messages({ "onlyErrors": true })

// 执行操作
browser_click({ "element": "Submit", "ref": "button[type='submit']" })

// 再次检查错误
browser_console_messages({ "onlyErrors": true })

4. 性能优化

  • 批量操作:使用 browser_fill_form 而非多次 browser_type
  • 避免全页截图:仅在必要时使用 fullPage: true
  • 复用浏览器实例:避免频繁的 browser_close

常见问题

Q: 如何处理动态加载的内容?

使用 browser_wait_for 等待特定文本或元素出现:

1
2
3
{
"text": "Content loaded"
}

Q: 如何获取页面数据?

使用 browser_evaluate 执行 JavaScript:

1
2
3
{
"function": "Array.from(document.querySelectorAll('.item')).map(el => el.textContent)"
}

Q: 如何处理多个标签页?

当前版本主要支持单页面操作。如需多标签页,建议在应用层管理多个浏览器实例。

Q: 性能如何?

  • 导航速度: ~500ms(本地页面)
  • 交互延迟: <100ms
  • 截图耗时: ~200ms(全页)

Q: 支持哪些文件上传?

支持任何本地文件,通过 browser_file_upload 工具指定文件路径数组。

评分详情

维度 评分 说明
功能性 4.8/5.0 工具全面,覆盖主要自动化场景
文档质量 4.7/5.0 官方文档清晰,示例丰富
社区活跃度 4.9/5.0 Microsoft 官方维护,社区活跃
维护状态 4.8/5.0 持续更新,快速响应问题
代码质量 4.5/5.0 TypeScript 实现,代码规范
综合评分 4.7/5.0 优秀的浏览器自动化 MCP 实现

总结

Playwright MCP Server 是 Microsoft 官方提供的专业级浏览器自动化工具,基于可访问性树技术实现快速、精确的 Web 自动化。它将 Playwright 的强大能力与 MCP 协议完美结合,为 AI 辅助开发提供了理想的浏览器自动化解决方案。

推荐指数: ⭐⭐⭐⭐⭐ (5/5)

适合你的情况

  • ✅ 需要浏览器自动化能力
  • ✅ AI 辅助端到端测试
  • ✅ Web 数据采集和监控
  • ✅ 跨浏览器兼容性测试
  • ✅ GitHub Copilot 集成开发

不适合的情况

  • ❌ 只需要简单的 HTTP 请求
  • ❌ 需要移动端浏览器支持
  • ❌ 资源极度受限的环境

相关资源


更新时间: 2025-10-14
数据来源: GitHub, 质量评分: 4.7/5.0

© 2026 Generative AI Discovery All Rights Reserved.
Theme by hiero