playwriter
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chineseplaywriter - Playwright Browser Automation for AI Agents
playwriter - 面向AI Agent的Playwright浏览器自动化工具
Playwriter connects AI agents to your running Chrome browser instead of spawning a new headless instance. Your existing logins, cookies, extensions, and tab state are all preserved.
Playwriter可将AI Agent连接到您正在运行的Chrome浏览器,而非启动新的无头浏览器实例。您的现有登录信息、Cookie、扩展程序以及标签页状态都会被保留。
When to use this skill
何时使用该工具
- Automate sites that require login (Gmail, GitHub, internal tools) without re-authenticating
- Control your real browser tab with full Playwright API access
- Run stateful automation that spans multiple steps (shopping carts, multi-step forms)
- Use MCP integration for Claude Desktop / AI agent browser control
- Record browser sessions or debug with CDP inspection
- Remote browser automation via tunnels
vs. agent-browser: agent-browser spawns a fresh headless browser (isolated, CI-friendly). playwriter connects to your existing Chrome session (authenticated, stateful, with your extensions).
- 无需重新验证即可实现需登录网站(如Gmail、GitHub、内部工具)的自动化操作
- 通过完整的Playwright API访问控制真实浏览器标签页
- 运行跨多步骤的有状态自动化任务(如购物车操作、多步骤表单填写)
- 集成MCP以实现Claude Desktop / AI Agent浏览器控制
- 录制浏览器会话或通过CDP检查进行调试
- 通过隧道实现远程浏览器自动化
与agent-browser的对比:agent-browser会启动全新的无头浏览器(隔离环境,适合CI场景)。playwriter则连接到您现有的Chrome会话(已验证状态、有状态、包含您的扩展程序)。
Installation
安装步骤
Step 1: Install Chrome Extension
步骤1:安装Chrome扩展程序
Install the Playwriter Chrome extension from the Web Store (search "Playwriter MCP" or use extension ID ).
jfeammnjpkecdekppnclgkkffahnhfheAfter installing, click the extension icon on any tab you want to allow automation on. The icon turns green when a tab is enabled for control.
从Chrome网上应用店安装Playwriter扩展程序(搜索"Playwriter MCP"或使用扩展程序ID )。
jfeammnjpkecdekppnclgkkffahnhfhe安装完成后,在您想要允许自动化操作的任意标签页上点击扩展程序图标。当标签页已启用控制时,图标会变为绿色。
Step 2: Install CLI
步骤2:安装CLI
bash
npm install -g playwriterbash
npm install -g playwriteror run without installing:
或无需安装直接运行:
npx playwriter@latest --help
The extension auto-starts a WebSocket relay server at `localhost:19988`.npx playwriter@latest --help
扩展程序会自动在 `localhost:19988` 启动一个WebSocket中继服务器。Core workflow
核心工作流
Always follow the Observe → Act → Observe pattern:
bash
undefined请始终遵循“观察 → 操作 → 观察”的模式:
bash
undefined1. Create a session
1. 创建会话
playwriter session new
playwriter session new
2. Navigate and observe
2. 导航并观察
playwriter -s 1 -e 'await page.goto("https://example.com")'
playwriter -s 1 -e 'await snapshot({ page })'
playwriter -s 1 -e 'await page.goto("https://example.com")'
playwriter -s 1 -e 'await snapshot({ page })'
3. Interact based on snapshot output
3. 根据快照输出进行交互
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
4. Re-observe after action
4. 操作后重新观察
playwriter -s 1 -e 'await snapshot({ page })'
undefinedplaywriter -s 1 -e 'await snapshot({ page })'
undefinedSession management
会话管理
bash
undefinedbash
undefinedCreate a new isolated stateful session
创建新的隔离有状态会话
playwriter session new
playwriter session new
List all active sessions (shows browser, profile, state info)
列出所有活跃会话(显示浏览器、配置文件、状态信息)
playwriter session list
playwriter session list
Delete a session and clear its state
删除会话并清除其状态
playwriter session delete <sessionId>
playwriter session delete <sessionId>
Reset the CDP connection and clear execution environment
重置CDP连接并清除执行环境
playwriter session reset <sessionId>
undefinedplaywriter session reset <sessionId>
undefinedThe -e / --eval flag
-e / --eval 参数
Execute arbitrary Playwright code in a session:
bash
undefined在会话中执行任意Playwright代码:
bash
undefinedNavigate to a URL
导航到指定URL
playwriter -s 1 -e 'await page.goto("https://github.com")'
playwriter -s 1 -e 'await page.goto("https://github.com")'
Fill a form field
填写表单字段
playwriter -s 1 -e 'await page.fill("#search", "playwriter"); await page.keyboard.press("Enter")'
playwriter -s 1 -e 'await page.fill("#search", "playwriter"); await page.keyboard.press("Enter")'
Get accessibility snapshot (preferred over screenshots for text content)
获取无障碍快照(对于文本内容检查,优先于截图)
playwriter -s 1 -e 'await snapshot({ page })'
playwriter -s 1 -e 'await snapshot({ page })'
Take screenshot with visual accessibility labels (color-coded by element type)
生成带有无障碍标签的截图(按元素类型进行颜色编码)
playwriter -s 1 -e 'await screenshotWithAccessibilityLabels({ page })'
playwriter -s 1 -e 'await screenshotWithAccessibilityLabels({ page })'
Store state between calls (state object persists within session)
在多次调用之间存储状态(state对象在同一会话中会持续保留)
playwriter -s 1 -e 'state.url = page.url(); state.title = await page.title()'
playwriter -s 1 -e 'console.log(state.url, state.title)'
**Quoting rules**: Wrap code in single quotes. For multiline code, use heredoc:
```bash
playwriter -s 1 -e "$(cat <<'EOF'
const text = await page.textContent('h1');
state.heading = text;
await snapshot({ page });
EOF
)"playwriter -s 1 -e 'state.url = page.url(); state.title = await page.title()'
playwriter -s 1 -e 'console.log(state.url, state.title)'
**引号规则**:将代码包裹在单引号中。对于多行代码,使用here文档:
```bash
playwriter -s 1 -e "$(cat <<'EOF'
const text = await page.textContent('h1');
state.heading = text;
await snapshot({ page });
EOF
)"MCP Integration
MCP集成
Claude Desktop config (~/.claude/settings.json
or Claude Desktop MCP settings)
~/.claude/settings.jsonClaude Desktop配置(~/.claude/settings.json
或 Claude Desktop MCP设置)
~/.claude/settings.jsonjson
{
"mcpServers": {
"playwriter": {
"command": "npx",
"args": ["-y", "playwriter@latest"]
}
}
}json
{
"mcpServers": {
"playwriter": {
"command": "npx",
"args": ["-y", "playwriter@latest"]
}
}
}Remote relay server
远程中继服务器
json
{
"mcpServers": {
"playwriter": {
"command": "npx",
"args": ["-y", "playwriter@latest"],
"env": {
"PLAYWRITER_HOST": "your-relay-host",
"PLAYWRITER_TOKEN": "your-secret-token",
"PLAYWRITER_SESSION": "1"
}
}
}
}json
{
"mcpServers": {
"playwriter": {
"command": "npx",
"args": ["-y", "playwriter@latest"],
"env": {
"PLAYWRITER_HOST": "your-relay-host",
"PLAYWRITER_TOKEN": "your-secret-token",
"PLAYWRITER_SESSION": "1"
}
}
}
}MCP tools exposed
暴露的MCP工具
| Tool | Description |
|---|---|
| Run arbitrary JavaScript Playwright code ( |
| Recreate CDP connection, clear state — use after connection failures |
| 工具 | 描述 |
|---|---|
| 运行任意JavaScript Playwright代码(参数包含 |
| 重新创建CDP连接,清除状态 —— 连接失败后使用 |
Built-in globals (in execute sandbox)
内置全局变量(在execute沙箱中)
| Global | Description |
|---|---|
| Current Playwright page |
| Browser context |
| Persistent object — survives multiple |
| Accessibility tree as text (token-efficient) |
| Screenshot with color-coded element markers |
| Article text via Mozilla Readability |
| Smart load detection |
| Browser console errors/logs |
| Cleaned DOM HTML |
| Get selector for a DOM element |
| React component source tree |
| 全局变量 | 描述 |
|---|---|
| 当前Playwright页面 |
| 浏览器上下文 |
| 持久化对象 —— 在同一会话的多次 |
| 以文本形式呈现的无障碍树(Token效率更高) |
| 带有颜色编码元素标记的截图 |
| 通过Mozilla Readability获取文章文本 |
| 智能加载检测 |
| 浏览器控制台错误/日志 |
| 清理后的DOM HTML |
| 获取DOM元素的选择器 |
| React组件源码树 |
Accessibility labeling
无障碍标签
screenshotWithAccessibilityLabels({ page })| Color | Element type |
|---|---|
| Yellow | Links |
| Orange | Buttons |
| Coral | Inputs |
| Pink | Checkboxes |
| Peach | Sliders |
Click a labeled element using :
aria-refbash
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'screenshotWithAccessibilityLabels({ page })| 颜色 | 元素类型 |
|---|---|
| 黄色 | 链接 |
| 橙色 | 按钮 |
| 珊瑚色 | 输入框 |
| 粉色 | 复选框 |
| 桃色 | 滑块 |
使用点击带标签的元素:
aria-refbash
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'Network interception and state persistence
网络拦截与状态持久化
bash
undefinedbash
undefinedIntercept network requests
拦截网络请求
playwriter -s 1 -e 'state.requests = []; page.on("request", r => state.requests.push(r.url()))'
playwriter -s 1 -e 'state.requests = []; page.on("request", r => state.requests.push(r.url()))'
Check collected requests later
稍后查看收集到的请求
playwriter -s 1 -e 'console.log(state.requests.slice(-5).join("\n"))'
playwriter -s 1 -e 'console.log(state.requests.slice(-5).join("\n"))'
Screen recording
屏幕录制
playwriter -s 1 -e 'await recording.start()'
playwriter -s 1 -e 'await recording.start()'
... do actions ...
...执行操作...
playwriter -s 1 -e 'const video = await recording.stop(); state.video = video'
undefinedplaywriter -s 1 -e 'const video = await recording.stop(); state.video = video'
undefinedRemote access
远程访问
Control Chrome on a remote machine via tunnel:
bash
undefined通过隧道控制远程机器上的Chrome浏览器:
bash
undefinedOn the machine with Chrome:
在运行Chrome的机器上:
playwriter serve --token my-secret --replace
playwriter serve --token my-secret --replace
From agent machine:
在Agent机器上:
playwriter --host <ip-or-hostname> --token my-secret -s 1 -e 'await page.goto("https://example.com")'
undefinedplaywriter --host <ip-or-hostname> --token my-secret -s 1 -e 'await page.goto("https://example.com")'
undefinedBest practices
最佳实践
- Observe → Act → Observe: always call before and after each action
snapshot({ page }) - Prefer over screenshots for text inspection (fewer tokens, faster)
snapshot() - Never chain actions blindly — verify state between steps
- Use stable selectors: prefer ,
aria-ref, or accessible rolesdata-testid - Store context in : avoid repeated navigation by persisting page references
state - Use on failures: CDP disconnects recover cleanly with
resetplaywriter session reset
- 观察 → 操作 → 观察:每次操作前后务必调用
snapshot({ page }) - 优先使用而非截图进行文本检查(Token更少、速度更快)
snapshot() - 切勿盲目链式执行操作 —— 在步骤之间验证状态
- 使用稳定选择器:优先选择、
aria-ref或无障碍角色data-testid - 将上下文存储在中:通过持久化页面引用避免重复导航
state - 失败时使用:CDP断开连接后,使用
reset可干净地恢复连接playwriter session reset
Troubleshooting
故障排除
| Issue | Solution |
|---|---|
| Extension not connecting | Click extension icon on the tab; icon must be green |
| Extension auto-starts server; check Chrome is running with extension installed |
| Code execution timeout | Increase with |
| Click fails silently | Use |
| Stale session | Run |
| Remote access failing | Confirm |
| 问题 | 解决方案 |
|---|---|
| 扩展程序无法连接 | 点击标签页上的扩展程序图标;图标必须为绿色 |
| 扩展程序会自动启动服务器;检查Chrome是否已安装扩展程序并运行 |
| 代码执行超时 | 使用 |
| 点击操作无响应 | 使用 |
| 会话失效 | 运行 |
| 远程访问失败 | 确认 |
References
参考资料
- GitHub: remorses/playwriter
- Chrome Extension Web Store
- — print full usage guide from CLI
playwriter skill - — view relay server + CDP log paths
playwriter logfile
- GitHub: remorses/playwriter
- Chrome扩展程序网上应用店
- —— 从CLI打印完整使用指南
playwriter skill - —— 查看中继服务器 + CDP日志路径
playwriter logfile