Playwright MCP 实战:用 Edge 持久化配置目录驱动浏览器自动化
最近在折腾浏览器自动化时,尝试了官方的 @playwright/mcp:它把 Playwright 的页面导航、点击、填写、快照、执行 JS 等能力封装成一组 MCP 工具,任何支持 MCP(Model Context Protocol)的 AI 编程助手都可以直接驱动一个真实浏览器完成操作。相比自己写脚本,最大的区别是浏览器始终可见、可接管,中途遇到登录、验证码可以人工接手。
一、最小配置:stdio 方式拉起
@playwright/mcp 是一个 stdio 类型的 MCP Server,在 mcp.json 中声明即可,首次调用时由 npx 自动下载:
{
"mcpServers": {
"playwright": {
"command": "npx.cmd",
"args": [
"-y", "@playwright/mcp@latest",
"--browser", "msedge",
"--user-data-dir", "C:/Users/xxx/.pw-profile"
]
}
}
}
配置生效后,助手侧会出现 browser_navigate、browser_click、browser_snapshot、browser_evaluate 等二十多个工具,第一次调用时能看到 npx 拉包、Edge 窗口自动起来的完整过程。
二、为什么一定要带 --user-data-dir
默认情况下每次启动都是一份临时的干净配置:没有 Cookie、没有登录态,目标网站一跳登录页,自动化就断了。加上 --user-data-dir 指向一个固定目录后,浏览器的登录状态、Cookie、站点权限都会持久保存在里面:第一次手动登录一次,之后的自动化会话直接复用,对内部系统、需要短信验证的站点尤其有用。
三、踩坑:Browser is already in use
配置完成后第一次调用,很可能撞到这个错误:
Error: Browser is already in use for C:/.../.pw-profile,
use --isolated to run multiple instances of the same browser
原因是 Chromium 系浏览器对同一份用户数据目录有单实例锁(SingletonLock)。如果另一个客户端已经用同一个目录起了 Playwright MCP,或者上次的浏览器进程没退干净,第二个连接就会失败。排查命令(PowerShell):
Get-CimInstance Win32_Process -Filter "Name='msedge.exe'" |
Where-Object CommandLine -like '*pw-profile*' |
Select ProcessId, CommandLine
处理方式有三种:结束占用该目录的旧进程后重连;给不同的 MCP 宿主分配不同的 user-data-dir;临时调试用 --isolated 起一次性实例(但不保留登录态)。另外一个容易忽略的点:即使浏览器已经手动打开并登录了目标网站,新开的 MCP 会话并不会“附加”到已有窗口,而是按自己的配置重新拉起,所以锁冲突一定要提前理清。
四、Windows 下的两个细节
- command 用 npx.cmd 而不是 npx:stdio 拉起时不走 shell,没有 .cmd 后缀会找不到可执行文件。
- 路径统一用正斜杠:--user-data-dir 写成 C:/Users/xxx/.pw-profile 即可,避免反斜杠在 JSON 和命令行里被反复转义。
浏览器本身无需额外下载,--browser msedge 会直接使用系统已安装的 Microsoft Edge(Chrome 同理用 chrome)。
五、取页面数据:结构化文本比截图可靠
自动化打卡类场景(例如成长中心的任务列表)常见误区是截图再识别。更稳的做法是导航后等待接口渲染完成,用 browser_evaluate 直接取容器的 innerText:
() => {
const box = [...document.querySelectorAll('*')]
.find(n => n.textContent.trim() === '任务中心')
.closest('div');
return box.innerText;
}
一次调用就能拿到“任务名 + 积分 + 去完成/已完成”的完整清单,不依赖像素、不受主题色影响;遇到“展开全部任务”这类懒加载按钮,循环点击直到文本行数不再增长即可收齐全部数据。
小结
@playwright/mcp + Edge 持久化目录这套组合,本质上是给 AI 助手配了一个“有记忆、可见、可接管”的浏览器:配置只有一个 JSON,难点集中在登录态复用和单实例锁两件事上。理清之后,查状态、跑表单、批量取数这类日常操作都可以交给它,人只需要在登录验证和最终确认时介入。
- 点赞
- 收藏
- 关注作者
评论(0)