Playwright MCP 实战:用 Edge 持久化配置目录驱动浏览器自动化

举报
yd_273530197 发表于 2026/10/13 20:50:07 2026/10/13
【摘要】 最近在折腾浏览器自动化时,尝试了官方的 @playwright/mcp:它把 Playwright 的页面导航、点击、填写、快照、执行 JS 等能力封装成一组 MCP 工具,任何支持 MCP(Model Context Protocol)的 AI 编程助手都可以直接驱动一个真实浏览器完成操作。相比自己写脚本,最大的区别是浏览器始终可见、可接管,中途遇到登录、验证码可以人工接手。一、最小配置:...

最近在折腾浏览器自动化时,尝试了官方的 @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,难点集中在登录态复用和单实例锁两件事上。理清之后,查状态、跑表单、批量取数这类日常操作都可以交给它,人只需要在登录验证和最终确认时介入。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。