
Archon 项目 playwright-cli 浏览器会话管理实战多会话隔离、状态持久化与进程治理【免费下载链接】ArchonThe first open-source harness builder for AI coding. Make AI coding deterministic and repeatable.项目地址: https://gitcode.com/GitHub_Trending/archon3/Archon导读本指南围绕 Archon 仓库中随 Claude Skill 一并分发的playwright-cli浏览器自动化工具系统讲解其会话Session管理机制如何用命名会话把 Cookies、LocalStorage、IndexedDB、缓存、历史与标签页完全隔离如何并发运行多个互不干扰的浏览器实例如何让浏览器配置文件持久化到磁盘以及如何连接、分离并彻底清理运行中的浏览器进程。读完本文你将掌握一套可复制、可脚本化的多浏览器会话编排方案直接用于并发抓取、A/B 对比、登录态复用与 Playwright 测试调试等场景。本文以仓库内 Skill 参考文档 session-management.md 为核心骨架并结合同目录下的 SKILL.md、storage-state.md、playwright-tests.md 等文档交叉印证。为什么浏览器自动化需要会话管理playwright-cli以守护进程 CLI的方式驱动真实浏览器。默认情况下它会在内存中维护一个浏览器上下文profile所有命令open、goto、click、snapshot等都作用于当前激活的浏览器。会话Session就是这个浏览器上下文的逻辑命名它决定了命令落在哪个浏览器实例上以及该实例拥有哪些独立的存储空间。会话管理解决三类核心问题隔离不同任务登录态抓取 vs 公开页面浏览不应共享 Cookies 与存储避免相互污染并发多个浏览器实例可以同时运行每个会话独立占用一个实例互不阻塞生命周期治理浏览器进程需要可控的启动、关闭、强杀与数据清理手段防止僵尸进程和磁盘垃圾堆积。在 Archon 仓库中这套能力被封装为 Claude Skill定义于 SKILL.md其allowed-tools声明了Bash(playwright-cli:*)等权限仓库的 scripts/check-bundled-skill.ts 也会例行校验.claude/skills/下各 skill 目录包括 playwright-cli的文件完备性。命名浏览器会话用-s参数隔离上下文-s等价于--session是会话管理的核心参数。为命令指定会话名即可把操作定向到对应名称的浏览器上下文名称不同浏览器实例就不同# 浏览器 1身份认证流程独立 Cookies、存储 playwright-cli -sauth open https://app.example.com/login # 浏览器 2公开浏览独立的 Cookies、存储 playwright-cli -spublic open https://example.com # 命令按浏览器会话隔离 playwright-cli -sauth fill e1 userexample.com playwright-cli -spublic snapshot要点-s是全局参数可作用于任意子命令open、fill、snapshot、close等会话名具有语义作用它是该浏览器实例的用户数据目录、进程归属与命令路由的唯一标识未指定-s的命令一律落到default会话详见下文默认浏览器会话一节。会话隔离维度每个会话拥有独立的浏览器状态每个浏览器会话都是独立的小世界互不影响Cookies不同会话的 Cookie 完全隔离-sauth登录后不会污染-spublicLocalStorage / SessionStorage站点本地存储按会话隔离IndexedDB离线数据库独立CacheHTTP 缓存互不共享Browsing history浏览历史独立Open tabs打开的标签页属于各自的会话互不可见。这意味着你可以在同一个脚本里同时跑已登录的管理员操作与匿名访客行为而无需担心状态串扰。若需要把某个会话的存储状态Cookies、localStorage 等导出给另一个会话复用应配合state-save/state-load命令详见 storage-state.md而不是试图共享内存态。会话生命周期管理命令playwright-cli提供了一组完整的会话管理命令覆盖查看、关闭、强杀与数据清理# 列出所有浏览器会话 playwright-cli list # 停止某个浏览器会话关闭浏览器 playwright-cli close # 停止默认浏览器 playwright-cli -smysession close # 停止指定名称的浏览器 # 停止所有浏览器会话 playwright-cli close-all # 强制终结所有守护进程用于残留/僵尸进程 playwright-cli kill-all # 删除浏览器会话的用户数据profile 目录 playwright-cli delete-data # 删除默认浏览器数据 playwright-cli -smysession delete-data # 删除指定名称浏览器数据各命令的适用场景命令行为适用场景list列出当前所有会话排查哪个会话还开着、规划清理close优雅关闭单个会话的浏览器任务结束后的常规收尾close-all优雅关闭全部会话批量任务收尾、脚本末尾统一清理kill-all强制杀掉所有守护进程浏览器无响应、存在僵尸进程delete-data删除某会话的 profile 目录释放磁盘、清除过期登录态list也支持结构化输出配合脚本使用非常方便来自 SKILL.mdplaywright-cli list --json默认浏览器会话与环境变量默认会话省略-s时所有命令使用名为default的浏览器会话# 以下命令作用于同一个默认浏览器会话 playwright-cli open https://example.com playwright-cli snapshot playwright-cli close # 停止默认浏览器环境变量PLAYWRIGHT_CLI_SESSION如果你希望整个 shell 会话甚至一段自动化流程都默认指向某个命名会话可以用环境变量设置默认会话名export PLAYWRIGHT_CLI_SESSIONmysession playwright-cli open example.com # 自动使用 mysession命令行中显式传入的-sname优先于该环境变量适合在脚本里做局部覆盖。连接外部浏览器attach / detachattach用于连接一个已经在运行的浏览器而不是新启动一个。它支持三种连接来源并且只对通过attach建立的会话生效的detach命令来拆除连接由open启动的会话用close关闭。按渠道名连接channel连接正在运行的 Chrome 或 Edge 实例。前提目标浏览器必须开启远程调试——在浏览器中打开chrome://inspect/#remote-debugging并勾选 Allow remote debugging for this browser instance。# 连接 Chrome playwright-cli attach --cdpchrome # 连接 Chrome Canary playwright-cli attach --cdpchrome-canary # 连接 Microsoft Edge playwright-cli attach --cdpmsedge # 连接 Edge Dev playwright-cli attach --cdpmsedge-dev支持的渠道名chrome、chrome-beta、chrome-dev、chrome-canary、msedge、msedge-beta、msedge-dev、msedge-canary。会话命名规则未提供--session时会话以渠道名命名例如--cdpmsedge会创建名为msedge的会话因此并行 attach Chrome 与 Edge 不会都挤在default上冲突如需覆盖可显式传--sessionname。通过 CDP 端点连接连接任何暴露了 Chrome DevTools Protocol 端点的浏览器playwright-cli attach --cdphttp://localhost:9222适用于自行启动的、带--remote-debugging-port的 Chromium 系浏览器或远程调试环境。通过浏览器扩展连接连接安装了 Playwright 扩展的浏览器playwright-cli attach --extension分离拆除 attach 会话而不影响外部浏览器本身# 分离默认的 attach 会话 playwright-cli detach # 分离指定会话 playwright-cli -smsedge detach注意detach只对通过attach创建的会话有效通过open创建的会话请使用close。attach在调试场景中尤其有价值playwright-tests.md 展示了用它调试 Playwright 测试的方法——测试以--debugcli模式在后台运行输出包含会话名的调试指引后即可用playwright-cli attach tw-abcdef连上测试中的页面进行逐步排查。会话配置选项open支持在创建会话时一次性配置浏览器的行为这些配置与该会话绑定# 使用配置文件打开 playwright-cli open https://example.com --config.playwright/my-cli.json # 指定浏览器内核 playwright-cli open https://example.com --browserfirefox # 有头模式显示浏览器窗口 playwright-cli open https://example.com --headed # 持久化 profile默认仅存内存 playwright-cli open https://example.com --persistent来自 SKILL.md 的补充参数--browserchrome | firefox | webkit | msedge选择内核默认通常是 Chromium--mobile/--deviceiPhone 15模拟移动端设备Pixel 10 / iPhone 17 等移动端页面通常更轻量快照更小、成本更低--persistent/--profile/path/to/profile持久化 profile详见下文--configfile从 JSON 配置文件读取启动设置。实战模式模式一并发抓取用后台启动多个命名会话抓取多个站点互不等待#!/bin/bash # 并发抓取多个站点 # 启动所有浏览器 playwright-cli -ssite1 open https://site1.com playwright-cli -ssite2 open https://site2.com playwright-cli -ssite3 open https://site3.com wait # 分别抓取快照 playwright-cli -ssite1 snapshot playwright-cli -ssite2 snapshot playwright-cli -ssite3 snapshot # 统一清理 playwright-cli close-all要点open本身是异步返回的浏览器在后台运行因此可以用并行拉起用wait等待全部就绪最后用close-all一键回收。脚本中若需要把快照内容透传给下游工具可叠加全局--raw选项来自 SKILL.md例如playwright-cli --raw snapshot site1.yml。模式二A/B 测试会话为不同用户变体各建一个会话保证测试数据互不干扰# 测试不同的用户体验 playwright-cli -svariant-a open https://app.com?varianta playwright-cli -svariant-b open https://app.com?variantb # 对比 playwright-cli -svariant-a screenshot playwright-cli -svariant-b screenshot这种每变体一个会话的模型同样适用于多账号并发测试每个账号一个命名会话Cookies 与登录态天然隔离。模式三持久化 Profile默认情况下浏览器 profile 只保存在内存中会话关闭即丢失。使用--persistent可将 profile 落盘下次启动自动复用包括已保存的登录态、站点偏好等# 使用自动生成的持久化位置 playwright-cli open https://example.com --persistent # 指定自定义 profile 目录 playwright-cli open https://example.com --profile/path/to/profile与命名会话结合使用# 用持久化 profile 创建命名会话 playwright-cli -smysession open example.com --persistent # 手动指定 profile 目录 playwright-cli -smysession open example.com --profile/path/to/profile playwright-cli -smysession click e6 playwright-cli -smysession close # 清理持久化会话的用户数据 playwright-cli -smysession delete-data持久化状态下profile 目录会占据磁盘空间不再需要时用-sname delete-data释放。需要强调的是默认的内存模式对敏感操作更安全——这也是 storage-state.md 在安全注意中强调默认内存模式更安全的原因。模式四登录态复用会话内的持久化 profile 适合同一浏览器长期复用登录态若要跨会话、跨机器地迁移登录态则应使用存储状态文件详见 storage-state.md# 登录后保存状态 playwright-cli open https://app.example.com/login playwright-cli fill e1 userexample.com playwright-cli click e3 playwright-cli state-save auth.json # 稍后可以是另一个会话恢复状态跳过登录 playwright-cli state-load auth.json playwright-cli open https://app.example.com/dashboard最佳实践1. 会话名要有语义# 好目的清晰 playwright-cli -sgithub-auth open https://github.com playwright-cli -sdocs-scrape open https://docs.example.com # 避免无意义的通用名 playwright-cli -ss1 open https://github.com语义化命名让list输出可读、让close-all/delete-data的清理目标一目了然也方便在脚本日志中定位问题。2. 用完即清理# 任务结束后关闭浏览器 playwright-cli -sauth close playwright-cli -sscrape close # 或一次性全部关闭 playwright-cli close-all # 若浏览器无响应、残留僵尸进程 playwright-cli kill-all优雅关闭优先close/close-allkill-all仅作为兜底手段用于清理异常退出的守护进程。3. 及时删除过期数据# 删除旧会话的浏览器数据释放磁盘 playwright-cli -soldsession delete-data持久化 profile 和多次登录产生的存储数据会持续占用磁盘配合定期清理如 CI 脚本末尾执行可避免磁盘膨胀。4. 敏感数据安全不要在存储状态文件中提交认证 Token*.auth-state.json应加入.gitignore自动化结束后删除状态文件敏感数据优先通过环境变量注入不需要持久化时使用默认的内存模式。总结会话管理是playwright-cli从单浏览器玩具走向多任务自动化平台的关键能力-s参数与PLAYWRIGHT_CLI_SESSION环境变量解决了命令发给谁的路由问题命名会话天然提供 Cookies、存储、缓存、历史与标签页的完全隔离list/close/close-all/kill-all/delete-data构成完整的生命周期治理手段attach/detach则打通了接管外部浏览器的能力与 playwright-tests.md 的测试调试流程无缝衔接。在 Archon 项目中这些参考文档与 SKILL.md 一同构成 Claude 可直接调用的浏览器自动化技能包你可以把上述命令模式直接嵌入自己的工作流脚本并发抓取用多命名会话 close-allA/B 对比用变体会话长期登录态用--persistent跨会话迁移用state-save/state-load。配合会话内的--raw结构化输出整套方案可以稳定地融入流水线实现确定性、可重复的浏览器自动化。【免费下载链接】ArchonThe first open-source harness builder for AI coding. Make AI coding deterministic and repeatable.项目地址: https://gitcode.com/GitHub_Trending/archon3/Archon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考