Playwright MCP - 基于 Playwright 的模型上下文协议服务器


一、项目概览

Playwright MCP 是一个基于 Playwright 的浏览器自动化服务,通过结构化可访问性快照(而非截图)实现大语言模型与网页的交互。


相关资源


核心功能

快照模式工具集
  • browser_snapshot:获取可访问性快照
  • browser_click:基于元素引用点击
  • browser_type:文本输入(支持慢速输入模式)
  • browser_drag:拖拽操作
视觉模式工具集
  • browser_screen_capture:页面截图
  • browser_screen_click:坐标点击
  • browser_screen_type:键盘输入
浏览器管理
  • 标签页管理(新建/切换/关闭)
  • 导航控制(前进/后退)
  • 控制台消息获取
  • PDF 生成功能

核心特性

1、高效轻量

  • 基于 Playwright 可访问性树,非像素级输入
  • 默认使用快照模式(Snapshot Mode),性能优于视觉模式

2、LLM 友好

  • 纯结构化数据交互,无需视觉模型
  • 确定性工具应用,避免基于截图方法的歧义问题

3、多模式支持

  • 快照模式(默认):browser_snapshot 等工具
  • 视觉模式(需启用):browser_screen_capture 等工具

二、安装配置

VS Code 安装

code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

基础配置

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

用户配置文件

Playwright MCP 将使用位于指定路径的新配置文件启动浏览器。
所有登录信息都将存储在该配置文件中,如需清除离线状态,您可以在会话之间删除它。


  • Windows : %USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile
  • macOS : ~/Library/Caches/ms-playwright/mcp-{channel}-profile
  • Linux : ~/.cache/ms-playwright/mcp-{channel}-profile

配置文件

Playwright MCP 服务器可以通过 JSON 配置文件进行配置。以下是完整的配置格式:


{
  // Browser configuration
  browser?: {
    // Browser type to use (chromium, firefox, or webkit)
    browserName?: 'chromium' | 'firefox' | 'webkit';

    // Path to user data directory for browser profile persistence
    userDataDir?: string;

    // Browser launch options (see Playwright docs)
    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
    launchOptions?: {
      channel?: string;        // Browser channel (e.g. 'chrome')
      headless?: boolean;      // Run in headless mode
      executablePath?: string; // Path to browser executable
      // ... other Playwright launch options
    };

    // Browser context options
    // @see https://playwright.dev/docs/api/class-browser#browser-new-context
    contextOptions?: {
      viewport?: { width: number, height: number };
      // ... other Playwright context options
    };

    // CDP endpoint for connecting to existing browser
    cdpEndpoint?: string;

    // Remote Playwright server endpoint
    remoteEndpoint?: string;
  },

  // Server configuration
  server?: {
    port?: number;  // Port to listen on
    host?: string;  // Host to bind to (default: localhost)
  },

  // List of enabled capabilities
  capabilities?: Array<
    'core' | // Core browser automation
    'tabs' | // Tab management
    'pdf' | // PDF generation
    'history' | // Browser history
    'wait' | // Wait utilities
    'files' | // File handling
    'install' | // Browser installation
    'testing'   // Testing
  >;

  // Enable vision mode (screenshots instead of accessibility snapshots)
  vision?: boolean;

  // Directory for output files
  outputDir?: string;

  // Tool-specific configurations
  tools?: {
    browser_take_screenshot?: {
      // Disable base64-encoded image responses
      omitBase64?: boolean;
    }
  }
}

您可以通过--config命令行选项指定配置文件:

npx @playwright/mcp@latest --config path/to/config.json

三、运行

命令行参数

Playwright MCP 服务器支持以下命令行选项:

  • --browser <browser>:指定使用的浏览器或 Chrome 渠道。可选值包括:
    • chromefirefoxwebkitmsedge
    • Chrome 渠道:chrome-betachrome-canarychrome-dev
    • Edge 渠道:msedge-betamsedge-canarymsedge-dev
    • 默认值:chrome
  • --caps <caps>:启用以逗号分隔的功能列表,可选值:tabs、pdf、history、wait、files、install。默认启用全部功能。
  • --cdp-endpoint <endpoint>:指定连接的 CDP 端点
  • --executable-path <path>:指定浏览器可执行文件路径
  • --headless:以无头模式运行浏览器(默认显示界面)
  • --device:模拟移动设备
  • --user-data-dir <path>:指定用户数据目录路径
  • --port <port>:指定 SSE 传输监听的端口
  • --host <host>:指定服务器绑定的主机。默认为 localhost。使用 0.0.0.0 可绑定到所有接口。
  • --vision:运行使用截图的服务器(默认使用 Aria 快照)
  • --config <path>:指定配置文件路径

在 Linux 上运行

当在无显示器的系统上运行带界面的浏览器,或从 IDE 的工作进程运行时,请确保在包含 DISPLAY 变量的环境中启动 MCP 服务器,并通过 --port 参数启用 SSE 传输。


npx @playwright/mcp@latest --port 8931

然后在 MCP 客户端配置中,将 url 设置为 SSE 端点:


{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/sse"
    }
  }
}

Docker

注意: 目前 Docker 实现仅支持无头模式(headless)的 Chromium 浏览器。


{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "mcp/playwright"]
    }
  }
}

你可以自行构建 Docker 镜像。

docker build -t mcp/playwright .

编程式用法


import http from 'http';

import { createServer } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';

http.createServer(async (req, res) => {
  // ...

  // Creates a headless Playwright MCP server with SSE transport
  const mcpServer = await createServer({ headless: true });
  const transport = new SSEServerTransport('/messages', res);
  await mcpServer.connect(transport);

  // ...
});

工具模式

该工具提供两种使用模式:

1、快照模式(默认):使用无障碍快照,提供更好的性能和可靠性
2、视觉模式:使用屏幕截图进行基于视觉的交互

如需使用视觉模式,在启动服务器时添加 --vision 参数:


{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--vision"
      ]
    }
  }
}

Vision Mode 最适合能与元素通过 X Y 坐标空间


基于快照的交互操作

  • browser_snapshot
    • 功能描述:捕获当前页面的无障碍访问快照(比普通截图更全面)
    • 参数:无
  • browser_click
    • 功能描述:在网页元素上执行点击操作
    • 参数:
      • element (字符串):人类可读的元素描述,用于获取交互权限
      • ref (字符串):从页面快照中获取的精确目标元素引用
  • browser_drag
    • 功能描述:在两个元素之间执行拖放操作
    • 参数:
      • startElement (字符串):人类可读的源元素描述,用于获取交互权限
      • startRef (字符串):从页面快照中获取的精确源元素引用
      • endElement (字符串):人类可读的目标元素描述,用于获取交互权限
      • endRef (字符串):从页面快照中获取的精确目标元素引用
  • browser_hover
    • 功能描述:将鼠标悬停在页面元素上
    • 参数:
      • element (字符串):人类可读的元素描述,用于获取交互权限
      • ref (字符串):从页面快照中获取的精确目标元素引用
  • browser_type
    • 功能描述:在可编辑元素中输入文本
    • 参数:
      • element (字符串):人类可读的元素描述,用于获取交互权限
      • ref (字符串):从页面快照中获取的精确目标元素引用
      • text (字符串):需要输入的文本内容
      • submit (布尔值,可选):是否提交输入内容(输入后按回车)
      • slowly (布尔值,可选):是否逐字符输入。适用于需要触发页面键盘监听器的场景,默认情况下会一次性填充所有文本
  • browser_select_option
    • 功能描述:在下拉菜单中选择选项
    • 参数:
      • element (字符串):人类可读的元素描述,用于获取交互权限
      • ref (字符串):从页面快照中获取的精确目标元素引用
      • values (数组):需要在下拉菜单中选中的值数组,可以是单个值或多个值
  • browser_take_screenshot
    • 功能描述:捕获当前页面截图(注意:不能基于截图执行操作,如需操作请使用 browser_snapshot)
    • 参数:
      • raw (布尔值,可选):是否返回未压缩的PNG格式图片,默认为false(返回JPEG格式)
      • element (字符串,可选):人类可读的元素描述,用于获取截图权限。未提供时默认截取可视区域
      • ref (字符串,可选):从页面快照中获取的精确目标元素引用。未提供时默认截取可视区域

基于视觉的交互操作

  • browser_screen_capture
    • 功能描述:截取当前页面屏幕截图
    • 参数:无
  • browser_screen_move_mouse
    • 功能描述:将鼠标移动到指定位置
    • 参数:
      • element (字符串):用于获取元素交互权限的人类可读元素描述
      • x (数字):X坐标
      • y (数字):Y坐标
  • browser_screen_click
    • 功能描述:点击鼠标左键
    • 参数:
      • element (字符串):用于获取元素交互权限的人类可读元素描述
      • x (数字):X坐标
      • y (数字):Y坐标
  • browser_screen_drag
    • 功能描述:拖拽鼠标左键
    • 参数:
      • element (字符串):用于获取元素交互权限的人类可读元素描述
      • startX (数字):起始X坐标
      • startY (数字):起始Y坐标
      • endX (数字):结束X坐标
      • endY (数字):结束Y坐标
  • browser_screen_type
    • 功能描述:输入文本
    • 参数:
      • text (字符串):需要输入到元素中的文本内容
      • submit (布尔值,可选):是否提交已输入的文本(按回车键确认)

标签页管理

  • browser_tab_list
    • 描述:列出浏览器标签页
    • 参数:无
  • browser_tab_new
    • 描述:打开新标签页
    • 参数:
      • url (字符串,可选):新标签页中要跳转的URL。如果未提供,新标签页将为空白页。
  • browser_tab_select
    • 描述:通过索引选择标签页
    • 参数:
      • index (数字):要选择的标签页索引
  • browser_tab_close
    • 描述:关闭标签页
    • 参数:
      • index (数字,可选):要关闭的标签页索引。如果未提供,则关闭当前标签页。

导航功能

  • browser_navigate
    • 功能描述:跳转到指定URL
    • 参数说明:
      • url (字符串类型):需要跳转的目标网址
  • browser_navigate_back
    • 功能描述:返回上一页面
    • 参数说明:无
  • browser_navigate_forward
    • 功能描述:前进到下一页面
    • 参数说明:无

键盘操作

  • browser_press_key
    • 功能描述:模拟键盘按键操作
    • 参数说明:
      • key (字符串类型):指定要按下的键名或生成的字符,例如 ArrowLefta

控制台

  • browser_console_messages
    • 描述:返回所有控制台消息
    • 参数:无

文件与媒体

  • browser_file_upload
    • 描述:上传单个或多个文件
    • 参数:
      • paths (数组):待上传文件的绝对路径。可以是单个文件或多个文件。
  • browser_pdf_save
    • 描述:将页面保存为PDF
    • 参数:无

实用工具

  • browser_close
    • 描述:关闭当前页面
    • 参数:无
  • browser_wait
    • 描述:等待指定的秒数
    • 参数:
      • time (数字类型):等待的秒数
  • browser_resize
    • 描述:调整浏览器窗口大小
    • 参数:
      • width (数字类型):浏览器窗口的宽度
      • height (数字类型):浏览器窗口的高度
  • browser_install
    • 描述:安装配置文件中指定的浏览器。如果遇到浏览器未安装的错误提示,请调用此功能。
    • 参数:无
  • browser_handle_dialog
    • 描述:处理对话框
    • 参数:
      • accept (布尔类型):是否接受对话框。
      • promptText (字符串类型,可选):提示对话框中的文本内容。

测试

  • browser_generate_playwright_test
    • 功能描述:为指定场景生成 Playwright 测试用例
    • 参数说明:
      • name (字符串类型):测试名称
      • description (字符串类型):测试描述
      • steps (数组类型):测试步骤集合

伊织 xAI 2025-05-04(日)

### 关于 MCP 的实际操作指导与案例分享 MCP(Model Context Protocol)定义了一种开放协议,用于标准化应用程序向大型语言模型(LLMs)提供上下文的方式。通过这种协议,开发者能够更高效地构建基于 LLMs 的代理程序或复杂的工作流程[^1]。 对于希望深入了解并实践 MCP 技术的个人而言,目前可获得的操作指南和实战经验主要集中在以下几个方面: #### 1. 构建支持 MCP 协议的应用场景 为了更好地理解 MCP,在实践中可以尝试创建一些简单的应用场景来测试其功能。例如,利用 Playwright 配置 MCP Servers 可以为用户提供一个具体的起点,帮助探索如何将前端交互逻辑同后端的大规模预训练模型连接起来。 ```python from playwright.sync_api import sync_playwright def run(playwright): browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() # 假设这里有一个 API 接口用来启动 MCP Server 并传递必要的参数给它 mcp_server_url = "http://example.com/start_mcp" response = requests.post(mcp_server_url, json={"context": {"key": "value"}}) if __name__ == "__main__": with sync_playwright() as p: run(p) ``` #### 2. 学习相关框架和技术栈 除了直接涉及 MCP 的项目外,掌握其他关联技术也是十分重要的。比如学习 QT 框架下的高级编程技巧可以帮助提高应用的整体性能以及用户体验设计水平[^2]。虽然这些资源并非专门针对 MCP 而编写,但对于任何想要开发高质量桌面级或者移动设备上的 AI 应用的人来说都是非常有价值的参考资料。 #### 3. 社区交流与开源贡献 积极参与社区讨论、参与开源项目的建设也是一种获取宝贵经验和最新资讯的好方法。GitHub 上有许多活跃的仓库致力于改进和发展围绕着 MCP 生态系统的各种组件和服务;加入这样的团队不仅可以学到很多东西,还有机会与其他专业人士建立联系网络。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值