ToApp
15.35M · 2026-03-23
总结了使用Mcporter集成Playwright MCP到OpenClaw的完整测试过程,包括问题诊断、架构理解、正确使用方法。
PS:首先为什么使用这个方案,熬夜后的我闲的。突发奇想在家里搞一下openclaw。当时配置完browser工具,openclaw一直回复我它使用browser工具无法做点击这些操作(实际后来一股脑整完这个方案后我搜了browser也可以。有点无语)。我随便查了一下就想到了用mcp来做,就有了这么一篇文章......
┌─────────────────────────────────────────┐
│ OpenClaw AI (主agent) │
├─────────────────────────────────────────┤
│ Mcporter (MCP Manager Skill) │
├─────────────────────────────────────────┤
│ Playwright MCP Server │
├─────────────────────────────────────────┤
│ 22种浏览器工具 │
└─────────────────────────────────────────┘
npx @playwright/mcp@latest)现象:
我的输入: "请使用Playwright MCP打开m"
openclaw反馈: "我没有playwright工具可调用"
可能原因:
现象:
PS C:Users10193> playwright.open("https://www.bing.com")
问题分析:
playwright.open()playwright不是独立的命令行工具pnpm list -g @playwright/mcp
dependencies:
@playwright/mcp 0.0.68
状态: Playwright MCP已成功安装
验证步骤:
mcporter list playwright --schema playwright
输出: 显示了22种工具的完整schema
状态: Mcporter正确配置,工具schema已加载
日志证据:
07:37:02 info browser/chrome {"subsystem":"browser/chrome"} openclaw browser started (chrome) profile "openclaw" on 127.0.0.1:18800
07:37:18 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=a67b1d0d tool=browser
状态: Gateway重启成功,服务正常运行
它其实不明白怎么调用,这个时候得给他掰回来。
mcporter list playwright --schema playwright
结果: 输出了完整的22种工具定义
结论: Mcporter工作正常,能够连接到Playwright MCP
定义:
特点:
职责:
┌─────────────────────────────────┐
│ 1. 加载MCPORTER_CONFIG │
│ 从: C:Users10193configmcporter.json
│ │
│ 2. 解析mcpServers配置 │
│ { │
│ "playwright": { │
│ "command": "npx", │
│ "args": [...] │
│ } │
│ │
│ 3. 启动MCP服务器 │
│ npx @playwright/mcp@latest │
│ │
│ 4. 建立MCP连接 │
│ 通过标准MCP协议 │
│ │
│ 5. 注册工具到OpenClaw │
│ 22种browser_*工具 │
│ │
│ 6. 路由用户请求 │
│ 转发给MCP服务器处理 │
│ │
└─────────────────────────────────┘
# 错误1: 直接调用playwright命令
playwright.open("https://www.bing.com")
# 错误2: 在PowerShell中使用mcporter命令
mcporter call playwright.browser_navigate url=
问题:
【用户:其他agent】
请使用Playwright MCP帮我:
1. 打开
2. 等待搜索框
3. 输入 "测试搜索"
4. 点击搜索按钮
5. 截图
处理流程:
# 适用于熟悉命令行的用户
# 需要先验证mcporter可用
mcporter list playwright
# 执行具体命令
mcporter call playwright.browser_navigate url=
mcporter call playwright.browser_take_screenshot filename=screenshot.png
场景: 自动化脚本、批量操作
位置: C:Users10193configmcporter.json
内容:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
},
"imports": []
}
字段说明:
mcpServers: MCP服务器定义对象command: 启动命令(npx)args: 命令参数(数组格式)imports: 导入其他MCP服务器(可选)位置: C:Users10193.openclawopenclaw.json
相关配置:
{
"skills": {
"entries": {
"mcporter": {
"enabled": true,
"env": {
"MCPORTER_CONFIG": "C:Users10193configmcporter.json"
}
}
}
}
}
字段说明:
enabled: 是否启用该skillenv: 环境变量(如MCPORTER_CONFIG)Windows PowerShell:
# 方法1: 使用setx
$env:MCPORTER_CONFIG = "C:Users10193configmcporter.json"
# 方法2: 在命令行中临时设置
$env:MCPORTER_CONFIG="C:Users10193configmcporter.json"; mcporter list playwright
症状: 请求使用Playwright MCP工具时收到"工具不可用"错误
诊断步骤:
# 1. 验证Playwright MCP安装
pnpm list -g @playwright/mcp
# 2. 检查Mcporter配置
type C:Users10193configmcporter.json
# 3. 查看Mcporter状态
mcporter list playwright
# 4. 检查OpenClaw日志
openclaw logs
常见原因:
症状: Mcporter能够连接,但操作超时
解决方案:
# 检查进程
tasklist | findstr playwright
# 增加超时
mcporter call playwright.browser_navigate url=
# (自动会使用默认超时)
症状: "Element not found"或"Timeout"
解决方案:
# 1. 先获取页面快照
mcporter call playwright.browser_snapshot filename=snapshot.md
# 2. 查看快照找到正确的ref值
# (然后在后续操作中使用正确的ref)
最佳实践:
推荐做法:
# 不推荐:使用CSS选择器
mcporter call playwright.browser_click selector="#search-box"
# 推荐:使用快照ref
mcporter call playwright.browser_snapshot
mcporter call playwright.browser_click ref=e147
优势:
避免超时:
# 不推荐:固定长时间等待
mcporter call playwright.browser_wait_for time=30
# 推荐:使用条件等待
mcporter call playwright.browser_wait_for text="搜索按钮" time=10
基本错误处理模式:
// 在OpenClaw对话中请求时
"请尝试以下操作,如果失败告诉我:
1. 打开
2. 如果超时,增加等待时间
3. 如果元素找不到,重新获取快照"
对于大量截图:
# 使用循环
$urls = @("https://www.bing.com", "https://www.google.com")
foreach ($url in $urls) {
$index = $urls.IndexOf($url) + 1
mcporter call playwright.browser_navigate url=$url
mcporter call playwright.browser_wait_for time=3
$filename = "screenshot-$index.png"
mcporter call playwright.browser_take_screenshot filename=$filename
}
启用调试模式:
# 在mcporter.json中添加调试选项
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--debug"]
}
}
}
保存日志:
# 保存控制台日志
mcporter call playwright.browser_console_messages level=debug filename=console.log
# 保存网络请求
mcporter call playwright.browser_network_requests includeStatic=false filename=network.json
# Playwright MCP搜索自动化脚本
param(
[string]$SearchKeyword = "AI助手"
)
# 1. 打开Bing
Write-Host "正在打开Bing..." -ForegroundColor Green
mcporter call playwright.browser_navigate url=
# 2. 等待搜索框
Write-Host "等待搜索框..." -ForegroundColor Yellow
mcporter call playwright.browser_wait_for time=3 text="搜索"
# 3. 获取快照
mcporter call playwright.browser_snapshot
# 4. 输入搜索词
Write-Host "输入搜索词..." -ForegroundColor Cyan
mcporter call playwright.browser_type ref=e147 text=$SearchKeyword
# 5. 点击搜索按钮
Write-Host "点击搜索按钮..." -ForegroundColor Cyan
mcporter call playwright.browser_click ref=e10
# 6. 等待结果
Write-Host "等待结果..." -ForegroundColor Yellow
mcporter call playwright.browser_wait_for time=5
# 7. 截图
Write-Host "截取结果..." -ForegroundColor Green
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$filename = "search-$SearchKeyword-$timestamp.png"
mcporter call playwright.browser_take_screenshot filename=$filename fullPage=true
Write-Host "完成!截图已保存: $filename" -ForegroundColor Green
# 抓取网页标题和链接
Write-Host "正在抓取数据..." -ForegroundColor Green
$jsCode = @'
const items = document.querySelectorAll(".content article");
return Array.from(items).slice(0, 5).map(item => ({
title: item.querySelector("h2")?.textContent,
url: item.querySelector("a")?.href,
time: new Date().toISOString()
}));
'@
mcporter call playwright.browser_evaluate function=$jsCode
Write-Host "数据抓取完成!" -ForegroundColor Green
# 填写复杂表单
$formData = @{
name = "测试用户"
email = "test@example.com"
phone = "13800138000"
message = "这是测试消息"
agree = "true"
} | ConvertTo-Json
# 转换为Playwright字段格式
$fields = @(
@{ name = "username"; type = "textbox"; value = $formData.name; ref = "e50" },
@{ name = "email"; type = "textbox"; value = $formData.email; ref = "e100" },
@{ name = "phone"; type = "textbox"; value = $formData.phone; ref = "e150" },
@{ name = "message"; type = "textbox"; value = $formData.message; ref = "e200" },
@{ name = "agree"; type = "checkbox"; value = $formData.agree.ToString().ToLower(); ref = "e250" }
) | ConvertTo-Json
# 执行填充
mcporter call playwright.browser_fill_form fields=$fields
# 提交表单
mcporter call playwright.browser_click ref=e300
# 等待结果
mcporter call playwright.browser_wait_for time=5
# 截图验证
mcporter call playwright.browser_take_screenshot filename=form-submitted.png fullPage=true
# 打开多个网站并行
$urls = @("https://www.bing.com", "https://www.google.com", "https://www.github.com")
foreach ($url in $urls) {
mcporter call playwright.browser_navigate url=$url
}
# 等待所有页面加载
Start-Sleep -Seconds 3
# 列出所有标签页
mcporter call playwright.browser_tabs action=list
# 截取每个标签页
$index = 1
while ($true) {
mcporter call playwright.browser_tabs action=select index=$index
mcporter call playwright.browser_take_screenshot filename="tab-$index.png"
$index++
if ($index -gt 3) { break }
}
Playwright MCP + Mcporter是一个强大的浏览器自动化解决方案,已经可以在OpenClaw中使用。通过正确的配置和使用方法,可以实现:
欢迎留言探讨!
最后更新: 2026-03-07
作者: 1G