playwright-mcp 的使用
什么是 playwright-mcp
playwright-mcp 是一个基于 Model Context Protocol (MCP) 的 Playwright 服务器,它为 AI 助手提供了强大的网页自动化能力。通过 MCP 协议,AI 助手可以直接控制浏览器,执行点击、输入、截图等操作,实现真正的网页交互自动化。
核心优势
- AI 友好:专为 AI 助手设计的接口,支持自然语言描述的操作
- 跨平台:支持 Windows、macOS、Linux 多平台
- 多浏览器:支持 Chromium、Firefox、Safari 等主流浏览器
- 高性能:基于 Playwright 的高效自动化引擎
安装与配置
通过 npm 安装
npm install -g @executeautomation/playwright-mcp
配置 Claude Desktop
在 Claude Desktop 的配置文件中添加 MCP 服务器配置:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@executeautomation/playwright-mcp"]
}
}
}
重启 Claude Desktop 后,就可以看到 playwright-mcp 提供的工具了。
核心功能与使用场景
浏览器控制工具
网页导航与截图
使用场景:查看网页内容、监控页面状态
请帮我打开 GitHub 首页并截图
AI 会调用 playwright_launch_browser 启动浏览器,然后使用 playwright_navigate_to 访问 GitHub,最后通过 playwright_screenshot 生成截图。
表单填写与提交
使用场景:自动化测试、数据录入
请帮我在登录页面输入用户名"test@example.com",密码"password123",然后点击登录按钮
AI 会依次执行:
playwright_type输入用户名playwright_type输入密码playwright_click点击登录按钮
数据抓取与分析
使用场景:信息收集、竞品分析
工作流程图:
常用工具详解
基础浏览器操作
| 工具名称 | 功能 | 使用场景 |
|---|---|---|
playwright_launch_browser | 启动浏览器 | 开始自动化流程 |
playwright_navigate_to | 页面导航 | 访问指定URL |
playwright_close | 关闭浏览器 | 结束自动化流程 |
页面交互工具
// 元素定位与操作示例
await page.click('button[data-testid="login-btn"]');
await page.type('#username', 'user@example.com');
await page.selectOption('select#country', 'China');
| 工具名称 | 功能 | 典型用法 |
|---|---|---|
playwright_click | 点击元素 | 按钮点击、链接跳转 |
playwright_type | 输入文本 | 表单填写、搜索输入 |
playwright_select_option | 下拉选择 | 选择国家、分类等 |
信息获取工具
| 工具名称 | 功能 | 应用场景 |
|---|---|---|
playwright_get_page_content | 获取页面内容 | 数据抓取、内容分析 |
playwright_screenshot | 页面截图 | 状态记录、问题诊断 |
playwright_get_element_text | 获取元素文本 | 提取特定信息 |
实际应用示例
电商价格监控
用户:请帮我监控某商品的价格变化
AI执行流程:
1. 打开浏览器访问商品页面
2. 定位价格元素并提取当前价格
3. 截图保存当前状态
4. 定期重复检查并对比价格 变化
社交媒体内容发布
用户:帮我在社交平台发布一条动态
AI执行流程:
1. 导航到发布页面
2. 点击发布按钮打开编辑器
3. 输入动态内容
4. 上传图片(如需要)
5. 点击发布按钮
网站功能测试
测试流程自动化:
最佳实践
元素定位策略
优先使用稳定的选择器:
data-testid属性(推荐)id属性- 语义化的 CSS 类名
- 避免使用位置相关的选择器
错误处理与重试
// 带重试机制的操作示例
async function clickWithRetry(selector: string, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
await page.click(selector, { timeout: 5000 });
return;
} catch (error) {
if (i === maxRetries - 1) throw error;
await page.waitForTimeout(1000);
}
}
}