☰
Playwright-MCP持久化Profile-Cookie登录态保存教程
2026/10/8 2:05:05 网站建设 项目流程

Playwright MCP 用持久化 Profile 保存 Cookie 登录态 —— 完整技术教程

适用范围:opencode + Playwright MCP 浏览器自动化场景
关键词:Playwright MCP、persistent profile、user-data-dir、cookie 持久化、免登录


一、为什么要持久化 Profile?

浏览器自动化(如 opencode 里调用 Playwright MCP)最烦的一点是:每次启动浏览器,登录态、Cookie、LocalStorage 全部丢失。

比如:

  • 自动化需要访问某个需要登录的站点,每次都重新扫码 / 输密码 / 验证码。
  • Cookie 有效期一过又得重新登录。
  • 登录验证(滑块、人机校验)在无头浏览器里几乎过不去。

解决办法:给自动化用的浏览器绑定一个"固定身份目录"(persistent profile),让 Cookie 和登录态落盘。下次启动自动加载,登录一次、长期有效。


二、原理:Playwright MCP 的持久化机制

2.1 默认行为

Playwright MCP 启动浏览器时,默认就带一个临时 user-data-dir(每次随机,用完即焚 → 登录态必然丢失)。

2.2 核心参数:--user-data-dir

MCP 支持通过命令行指定固定的浏览器数据目录:

npx-y@playwright/mcp@latest\--user-data-dir /home/a1/.cache/hs-playwright-mcp

指定之后:

  • Chrome 会把Cookie、LocalStorage、IndexedDB、登录态全部写入这个目录下的Default/子目录。
  • 具体文件:Default/Cookies(SQLite 数据库)、Default/Local Storage/、Default/Login Data等。
  • 下次任何会话再指向同一个目录 → 自动加载上次的全部状态。

2.3 一个关键限制:同一时刻只能一个实例用

⚠️ 一个 user-data-dir同一时刻只能被一个浏览器进程占用。

判断标准:目录里有没有锁文件锁定(错误提示形如Browser is already in use for <userDataDir>)。

因此:

  • 不能用--isolated(那是"隔离模式",刻意不落盘,与之相反)。
  • 想要多个并行会话,各自指向不同的 user-data-dir。

关闭浏览器后,锁自动释放,目录可被再次使用。


三、实战:opencode MCP 配置(本机已验证)

3.1 配置文件位置

~/.config/opencode/opencode.json

3.2 当前生效的 Playwright MCP 配置

{"playwright":{"command":["npx","-y","@playwright/mcp@latest","--user-data-dir","/home/a1/.cache/hs-playwright-mcp","--executable-path","/usr/bin/google-chrome","--no-sandbox"],"enabled":true,"type":"local"}}

要点:

参数值作用
--user-data-dir/home/a1/.cache/hs-playwright-mcp持久化 profile,Cookie/登录态落在这里
--executable-path/usr/bin/google-chrome直接用系统里装的真实 Chrome,而非 Playwright 自带内核
--no-sandbox无值容器/服务器环境(root 或受限沙箱)下必需的启动开关

注意:上面是"真实 Chrome 内核 + 固定 profile",即执行文件是真实的 Chrome。某些网站仍可能通过 UA/自动化特征识别为自动化,但 Cookie 持久化与 profile 复用与 UA 无关,照常生效。


四、验证方法(照做即可)

4.1 看进程确认用的哪个目录

psaux|grep-E"playwright-mcp|/opt/google/chrome/chrome"|grep-vgrep

找--user-data-dir=/home/a1/.cache/hs-playwright-mcp这一行即确认。

4.2 看 Cookie 文件是否已落盘

ls-la/home/a1/.cache/hs-playwright-mcp/Default/Cookies

有文件且大小非 0 → Cookie 数据库已存在。

4.3 实测:写入 Cookie → 关浏览器 → 重开 → 还在

  1. 打开任意站点(如https://example.com)。

  2. 注入测试 Cookie:

    document.cookie='test_persist=hello; path=/; max-age=3600';
  3. 读取确认写入成功 → 关闭浏览器标签页。

  4. 重新导航到同一站点,再次读取。

    document.cookie// 返回 "test_persist=hello" → 持久化成功 ✅

本机实测结果:test_persist=hello_mybili_123在关浏览器重开后依然存在。✅


五、验收清单:怎么确保"MCP 一定走带 Cookie 的 Profile"

  1. 唯一配置源:

    grep-A8playwright ~/.config/opencode/opencode.json

    确认--user-data-dir指向固定路径,且没有--isolated。

  2. 无项目级覆盖:

    cat/home/a1/mybilibili/opencode.jsongrep-rn"isolated"~/.config/opencode/ /home/a1/mybilibili/

    都为空 → 全局配置唯一生效。

  3. 进程实测(最可靠):

    psaux|grep"user-data-dir"

    看活动进程实际用的目录是否等于固定 profile 路径。

三条全过 → 100% 保证 Cookie 持久化。


六、常见坑与 FAQ

Q1:登录态为什么会丢?

用--isolated,或每次--user-data-dir指向不同临时目录 → 状态不落盘。检查命令行参数。

Q2:报错 “Browser is already in use for”?

该目录正被另一个 Chrome 实例占用。关掉那个实例,或改用新的 user-data-dir。

Q3:我想配置完立刻生效?

修改opencode.json后需要重启 opencode / 重连 MCP。可在 opencode 里执行/mcp重置。

Q4:Cookie 一直保存在磁盘,安全吗?

该目录权限为-rw-------(仅当前用户可读写),且只含自动化浏览器自动生成的会话数据。建议不要在自动化 profile 里手动保存密码/表单(password-store=basic仅示例环境可用)。

Q5:能直接复用"你平时打开的那个 Chrome"的登录态吗?

不能直接复用运行中的实例(Profile 锁冲突)。两条正路:

  • 方案 A(推荐):自动化专用 profile,在自动化浏览器里登录一次,之后长期有效。
  • 方案 B:Playwright MCP 官方 Chrome 扩展,直接接管你已打开的真实浏览器(可复用登录态,需额外装扩展)。

七、总结

固定 --user-data-dir = 持久化 Profile = Cookie/登录态落盘 = 登录一次长期免登录

这是让浏览器自动化"有记忆"的关键。配合真实 Chrome 内核(--executable-path),既能保存 Cookie,又能贴近真实浏览器行为。配置好之后,用 MCP 一定走带 Cookie 持久化的那个 Profile,无需每次重复登录。


参考:Playwright MCP 官方文档(microsoft/playwright-mcp README)。

本文档基于本机实际环境与实测结果编写。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询