Better Playwright MCP
🚀 better-playwright-mcp
better-playwright-mcp 是一个更出色的 Playwright MCP(模型上下文协议)服务器,采用客户端 - 服务器架构实现浏览器自动化。它通过创新的语义快照算法,能将页面内容减少多达 90%,同时保留所有有意义的元素,有效解决了传统浏览器自动化工具常面临的令牌限制问题。
🚀 快速开始
安装
npm install -g better-playwright-mcp
运行
默认模式(MCP)
MCP 服务器需要 HTTP 服务器运行。你需要启动这两个服务器: 步骤 1:启动 HTTP 服务器
npx better-playwright-mcp server
步骤 2:在另一个终端中,启动 MCP 服务器
npx better-playwright-mcp
MCP 服务器将:
- 开始在标准输入输出上监听 MCP 协议消息。
- 连接到端口 3102 上的 HTTP 服务器。
- 通过 HTTP 服务器路由浏览器自动化命令。
独立 HTTP 服务器模式
你也可以独立运行 HTTP 服务器(这对于调试或自定义集成很有用):
npx better-playwright-mcp server
选项:
-p, --port <number>- 服务器端口(默认:3102)--host <string>- 服务器主机(默认:localhost)--headless- 以无头模式运行浏览器--chromium- 使用 Chromium 而不是 Chrome--no-user-profile- 不使用持久用户配置文件--user-data-dir <path>- 用户数据目录--snapshot-dir <path>- 保存快照的目录
✨ 主要特性
- 🎯 通过语义 HTML 快照减少 90% 的令牌使用。
- 🎭 通过 MCP 实现完整的 Playwright 浏览器自动化。
- 🏗️ 客户端 - 服务器架构,更好地分离关注点。
- 🛡️ 隐身模式,避免被检测。
- 📍 基于哈希的元素标识符,实现精确目标定位。
- 💾 持久的浏览器配置文件。
- 🚀 针对长时间运行的自动化任务进行优化。
- 📊 支持令牌感知输出,并自动截断。
📦 安装指南
npm install -g better-playwright-mcp
💻 使用示例
基础用法
创建和导航页面
// MCP 工具使用
{
"tool": "createPage",
"arguments": {
"name": "shopping",
"description": "Amazon shopping page",
"url": "https://amazon.com"
}
}
// 返回: { pageId: "uuid", snapshot: "..." }
与元素交互
// 使用 xp 标识符点击元素
{
"tool": "browserClick",
"arguments": {
"pageId": "uuid",
"ref": "3fa2b8c1" // 快照中的 xp 属性值
}
}
// 在输入字段中输入文本
{
"tool": "browserType",
"arguments": {
"pageId": "uuid",
"ref": "xp456",
"text": "search query",
"submit": true // 输入后按 Enter 键
}
}
捕获页面状态
// 获取语义快照
{
"tool": "getPageSnapshot",
"arguments": {
"pageId": "uuid"
}
}
// 截图
{
"tool": "getScreenshot",
"arguments": {
"pageId": "uuid",
"fullPage": true,
"type": "png"
}
}
📚 详细文档
MCP 工具
当与 AI 助手一起使用时,可使用以下工具:
页面管理
createPage- 创建一个带有名称和描述的新浏览器页面。activatePage- 通过 ID 激活特定页面。closePage- 关闭特定页面。listPages- 列出所有管理的页面及其标题和 URL。closeAllPages- 关闭所有管理的页面。listPagesWithoutId- 列出未管理的浏览器页面。closePagesWithoutId- 关闭所有未管理的页面。closePageByIndex- 按索引关闭页面。
浏览器操作
browserClick- 使用元素的xp标识符点击元素。browserType- 在元素中输入文本。browserHover- 悬停在元素上。browserSelectOption- 在下拉菜单中选择选项。browserPressKey- 按下键盘键。browserFileUpload- 上传文件到文件输入框。browserHandleDialog- 处理浏览器对话框(警告、确认、提示)。browserNavigate- 导航到 URL。browserNavigateBack- 返回上一页。browserNavigateForward- 前进到下一页。scrollToBottom- 滚动到页面/元素底部。scrollToTop- 滚动到页面/元素顶部。waitForTimeout- 等待指定的毫秒数。waitForSelector- 等待元素出现。
快照和实用工具
getPageSnapshot- 获取带有xp标识符的语义 HTML 快照。getScreenshot- 截图(PNG/JPEG)。getPDFSnapshot- 生成页面的 PDF。getElementHTML- 获取特定元素的 HTML。downloadImage- 从 URL 下载图像。captureSnapshot- 通过自动滚动捕获全页。
工作原理
语义快照的实际应用
原始 HTML
<div class="wrapper" style="padding: 20px; margin: 10px;">
<div class="container">
<div class="inner">
<button class="btn btn-primary" onclick="handleClick()"
style="background: blue; color: white;">
Click me
</button>
</div>
</div>
</div>
语义快照
button xp=3fa2b8c1 Click me
该算法:
- 移除不必要的包装 div。
- 去除内联样式和事件处理程序。
- 添加唯一标识符(
xp属性) - 元素 XPath 的哈希值。 - 仅保留有意义的内容。
基于差异的优化
为了减少数据传输和令牌使用:
- 第一个快照始终是完整的。
- 后续快照仅包含更改(差异)。
- 自动缓存以提高性能。
隐身功能
浏览器实例配置了:
- 自定义用户代理字符串。
- 禁用自动化指示符。
- WebGL 供应商欺骗。
- Canvas 指纹保护。
🔧 技术细节
问题所在
- 全页 HTML 通常超过 100K+ 令牌。
- 大多数 HTML 是噪声:内联样式、跟踪脚本、不可见元素。
- AI 助手的上下文窗口有限(即使有 200K 限制)。
- 仅加载几页后,复杂的网页自动化就变得不可能。
解决方案:语义快照
我们的核心创新是一种多阶段修剪算法,它:
- 识别有意义的元素 - 交互式元素(按钮、输入框)、语义 HTML5 标签和包含文本的元素。
- 生成唯一标识符 - 每个元素都有一个基于哈希的
xp属性,该属性源自其 XPath,用于精确目标定位。 - 移除不可见内容 - 标记并移除具有
display:none、零尺寸或隐藏父元素的元素。 - 解开无用的包装器 - 消除仅包装其他元素的 div 和 span。
- 去除不必要的属性 - 仅保留必要的属性,如
href、value、placeholder。
结果:一个简洁、语义化的表示,通常只使用原始令牌的 10%,同时保持完整功能。
架构
本项目实现了独特的两层架构:
- MCP 服务器 - 通过模型上下文协议与 AI 助手通信。
- HTTP 服务器 - 在后台运行以控制实际的浏览器实例。
AI 助手 <--[MCP 协议]--> MCP 服务器 <--[HTTP]--> HTTP 服务器 <---> 浏览器
这种设计允许 MCP 服务器保持轻量级,同时将浏览器控制委托给专用的 HTTP 服务。
开发
先决条件
- Node.js >= 18.0.0
- TypeScript
- Chrome 或 Chromium 浏览器
从源代码构建
# 克隆仓库
git clone https://github.com/yourusername/better-playwright-mcp.git
cd better-playwright-mcp
# 安装依赖
npm install
# 构建项目
npm run build
# 在开发模式下运行
npm run dev
项目结构
better-playwright-mcp/
├── src/
│ ├── index.ts # MCP 模式入口点
│ ├── server.ts # HTTP 服务器模式入口点
│ ├── playwright-mcp.ts # MCP 服务器实现
│ ├── client/
│ │ └── playwright-client.ts # MCP→HTTP 通信的 HTTP 客户端
│ ├── server/
│ │ └── playwright-server.ts # 控制浏览器的 HTTP 服务器
│ ├── extractor/
│ │ ├── parse2.ts # 生成 xp 标识符的 HTML 解析
│ │ ├── simplify-html.ts # HTML 简化
│ │ └── utils.ts # 提取实用工具
│ └── utils/
│ └── token-limiter.ts # 令牌计数和限制
├── bin/
│ └── cli.js # CLI 入口点
├── package.json
├── tsconfig.json
├── CLAUDE.md # AI 助手说明
└── README.md
故障排除
常见问题
-
MCP 服务器无法连接
- 确保 HTTP 服务器在端口 3102 上可访问。
- 检查防火墙设置。
- 尝试使用
DEBUG=* npx better-playwright-mcp运行。
-
浏览器无法启动
- 确保安装了 Chrome 或 Chromium。
- 尝试使用
--chromium标志。 - 检查系统资源。
-
令牌限制超出
- 快照会自动截断为 20,000 令牌。
- 使用目标选择器减少快照大小。
- 考虑使用截图而不是快照进行视觉检查。
调试模式
启用详细日志记录:
DEBUG=* npx better-playwright-mcp
日志和记录
操作记录保存到:
- macOS/Linux:
/tmp/playwright-records/ - Windows:
%TEMP%\playwright-records\
每个页面都有自己的目录,其中包含带时间戳的操作日志。
贡献
欢迎贡献!请随时提交拉取请求。
📄 许可证
MIT

Duckduckgo MCP Server
已认证
DuckDuckGo搜索MCP服务器,为Claude等LLM提供网页搜索和内容抓取服务
Python
57.0K
4.3分

Figma Context MCP
Framelink Figma MCP Server是一个为AI编程工具(如Cursor)提供Figma设计数据访问的服务器,通过简化Figma API响应,帮助AI更准确地实现设计到代码的一键转换。
TypeScript
55.8K
4.5分

Firecrawl MCP Server
Firecrawl MCP Server是一个集成Firecrawl网页抓取能力的模型上下文协议服务器,提供丰富的网页抓取、搜索和内容提取功能。
TypeScript
97.2K
5分

Minimax MCP Server
MiniMax Model Context Protocol (MCP) 是一个官方服务器,支持与强大的文本转语音、视频/图像生成API交互,适用于多种客户端工具如Claude Desktop、Cursor等。
Python
45.5K
4.8分

Exa Web Search
已认证
Exa MCP Server是一个为AI助手(如Claude)提供网络搜索功能的服务器,通过Exa AI搜索API实现实时、安全的网络信息获取。
TypeScript
40.2K
5分

Baidu Map
已认证
百度地图MCP Server是国内首个兼容MCP协议的地图服务,提供地理编码、路线规划等10个标准化API接口,支持Python和Typescript快速接入,赋能智能体实现地图相关功能。
Python
39.0K
4.5分

Edgeone Pages MCP Server
EdgeOne Pages MCP是一个通过MCP协议快速部署HTML内容到EdgeOne Pages并获取公开URL的服务
TypeScript
25.5K
4.8分

Context7
Context7 MCP是一个为AI编程助手提供实时、版本特定文档和代码示例的服务,通过Model Context Protocol直接集成到提示中,解决LLM使用过时信息的问题。
TypeScript
72.0K
4.7分

