概述
工具列表
內容詳情
替代品
什麼是Playwright MCP?
Playwright MCP是一個提供瀏覽器自動化能力的服務器,允許通過結構化數據而非傳統截圖方式與網頁交互。它特別為大型語言模型(LLM)優化,無需依賴視覺模型即可操作網頁。如何使用Playwright MCP?
只需在支持的客戶端(如VS Code、Cursor等)中安裝配置即可使用。服務器會提供網頁的結構化快照,讓LLM能準確理解和操作頁面元素。適用場景
網頁自動化測試、數據抓取、無障礙測試、LLM網頁交互訓練等需要精確控制瀏覽器的場景。主要功能
如何使用
使用案例
常見問題
相關資源
安裝
🚀 Playwright MCP
Playwright MCP 是一個模型上下文協議(MCP)服務器,它藉助 Playwright 提供瀏覽器自動化功能。該服務器使大語言模型(LLMs)能夠通過結構化的無障礙快照與網頁進行交互,無需使用截圖或經過視覺調整的模型。
✨ 主要特性
- 快速輕量:使用 Playwright 的無障礙樹,而非基於像素的輸入。
- 對大語言模型友好:無需視覺模型,完全基於結構化數據運行。
- 工具應用確定性高:避免了基於截圖方法常見的歧義問題。
📦 安裝指南
要求
- Node.js 18 或更高版本
- VS Code、Cursor、Windsurf、Claude Desktop、Goose 或其他 MCP 客戶端
開始安裝
首先,將 Playwright MCP 服務器與你的客戶端一起安裝。
標準配置適用於大多數工具:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
不同客戶端的安裝方式如下:
Claude Code
使用 Claude Code CLI 添加 Playwright MCP 服務器:
claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop
遵循 MCP 安裝 指南,使用上述標準配置。
Cursor
點擊按鈕安裝:
或手動安裝:
轉到 Cursor 設置 -> MCP -> 添加新的 MCP 服務器。自定義名稱,使用 命令 類型並輸入命令 npx @playwright/mcp。你還可以通過點擊 編輯 來驗證配置或添加命令參數。
Gemini CLI
遵循 MCP 安裝 指南,使用上述標準配置。
Goose
點擊按鈕安裝:
或手動安裝:
轉到 高級設置 -> 擴展 -> 添加自定義擴展。自定義名稱,選擇類型 STDIO,並將 命令 設置為 npx @playwright/mcp。點擊 "添加擴展"。
VS Code
點擊按鈕安裝:
或手動安裝:
遵循 MCP 安裝 指南,使用上述標準配置。你還可以使用 VS Code CLI 安裝 Playwright MCP 服務器:
# 對於 VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
安裝完成後,Playwright MCP 服務器將可在 VS Code 中與你的 GitHub Copilot 代理一起使用。
Windsurf
遵循 Windsurf MCP 文檔。使用上述標準配置。
📚 詳細文檔
配置
Playwright MCP 服務器支持以下參數。這些參數可以在上述 JSON 配置中的 "args" 列表中提供:
> npx @playwright/mcp@latest --help
--allowed-origins <origins> 允許瀏覽器請求的源列表,用分號分隔。默認允許所有源。
--blocked-origins <origins> 阻止瀏覽器請求的源列表,用分號分隔。阻止列表在允許列表之前評估。如果僅使用阻止列表,不匹配阻止列表的請求仍然允許。
--block-service-workers 阻止服務工作者
--browser <browser> 要使用的瀏覽器或 Chrome 通道,可能的值:chrome、firefox、webkit、msedge。
--caps <caps> 要啟用的額外功能列表,用逗號分隔,可能的值:vision、pdf。
--cdp-endpoint <endpoint> 要連接的 CDP 端點。
--config <path> 配置文件的路徑。
--device <device> 要模擬的設備,例如:"iPhone 15"
--executable-path <path> 瀏覽器可執行文件的路徑。
--headless 以無頭模式運行瀏覽器,默認是有頭模式
--host <host> 服務器綁定的主機。默認是 localhost。使用 0.0.0.0 綁定所有接口。
--ignore-https-errors 忽略 HTTPS 錯誤
--isolated 將瀏覽器配置文件保存在內存中,不保存到磁盤。
--image-responses <mode> 是否向客戶端發送圖像響應。可以是 "allow" 或 "omit",默認為 "allow"。
--no-sandbox 禁用通常會沙盒化的所有進程類型的沙盒。
--output-dir <path> 輸出文件的目錄路徑。
--port <port> SSE 傳輸監聽的端口。
--proxy-bypass <bypass> 要繞過代理的域名列表,用逗號分隔,例如 ".com,chromium.org,.domain.com"
--proxy-server <proxy> 指定代理服務器,例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"
--save-session 是否將 Playwright MCP 會話保存到輸出目錄。
--save-trace 是否將會話的 Playwright 跟蹤保存到輸出目錄。
--storage-state <path> 隔離會話的存儲狀態文件的路徑。
--user-agent <ua string> 指定用戶代理字符串
--user-data-dir <path> 用戶數據目錄的路徑。如果未指定,將創建一個臨時目錄。
--viewport-size <size> 指定瀏覽器視口大小(像素),例如 "1280, 720"
用戶配置文件
你可以像使用常規瀏覽器一樣使用持久配置文件運行 Playwright MCP(默認方式),也可以在隔離上下文中進行測試會話。
持久配置文件
所有登錄信息將存儲在持久配置文件中,如果你想清除離線狀態,可以在會話之間刪除該文件。持久配置文件位於以下位置,你可以使用 --user-data-dir 參數覆蓋它。
# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile
# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile
# Linux
- ~/.cache/ms-playwright/mcp-{channel}-profile
隔離模式
在隔離模式下,每個會話都在隔離配置文件中啟動。每次你要求 MCP 關閉瀏覽器時,會話將關閉,並且該會話的所有存儲狀態將丟失。你可以通過配置的 contextOptions 或 --storage-state 參數為瀏覽器提供初始存儲狀態。瞭解更多關於存儲狀態的信息 點擊這裡。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
配置文件
Playwright MCP 服務器可以使用 JSON 配置文件進行配置。你可以使用 --config 命令行選項指定配置文件:
npx @playwright/mcp@latest --config path/to/config.json
配置文件架構
```typescript { // 瀏覽器配置 browser?: { // 要使用的瀏覽器類型(chromium、firefox 或 webkit) browserName?: 'chromium' | 'firefox' | 'webkit';// 將瀏覽器配置文件保存在內存中,不保存到磁盤。
isolated?: boolean;
// 用於瀏覽器配置文件持久化的用戶數據目錄路徑
userDataDir?: string;
// 瀏覽器啟動選項(參見 Playwright 文檔)
// @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
launchOptions?: {
channel?: string; // 瀏覽器通道(例如 'chrome')
headless?: boolean; // 以無頭模式運行
executablePath?: string; // 瀏覽器可執行文件的路徑
// ... 其他 Playwright 啟動選項
};
// 瀏覽器上下文選項
// @see https://playwright.dev/docs/api/class-browser#browser-new-context
contextOptions?: {
viewport?: { width: number, height: number };
// ... 其他 Playwright 上下文選項
};
// 用於連接現有瀏覽器的 CDP 端點
cdpEndpoint?: string;
// 遠程 Playwright 服務器端點
remoteEndpoint?: string;
},
// 服務器配置 server?: { port?: number; // 監聽的端口 host?: string; // 綁定的主機(默認:localhost) },
// 額外功能列表 capabilities?: Array< 'tabs' | // 標籤管理 'install' | // 瀏覽器安裝 'pdf' | // PDF 生成 'vision' | // 基於座標的交互
;
// 輸出文件的目錄 outputDir?: string;
// 網絡配置
network?: {
// 允許瀏覽器請求的源列表。默認允許所有源。同時匹配 allowedOrigins 和 blockedOrigins 的源將被阻止。
allowedOrigins?: string[];
// 阻止瀏覽器請求的源列表。同時匹配 `allowedOrigins` 和 `blockedOrigins` 的源將被阻止。
blockedOrigins?: string[];
};
/**
- 是否向客戶端發送圖像響應。可以是 "allow" 或 "omit"。
- 默認為 "allow"。 */ imageResponses?: 'allow' | 'omit'; }
</details>
### 獨立 MCP 服務器
當在沒有顯示器的系統上運行有頭瀏覽器或從 IDE 的工作進程中運行時,從具有 DISPLAY 環境的環境中運行 MCP 服務器,並傳遞 `--port` 標誌以啟用 HTTP 傳輸。
```bash
npx @playwright/mcp@latest --port 8931
然後在 MCP 客戶端配置中,將 url 設置為 HTTP 端點:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
Docker
注意: 目前 Docker 實現僅支持無頭 Chromium。
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
你可以自己構建 Docker 鏡像。
docker build -t mcr.microsoft.com/playwright/mcp .
編程式使用
```js import http from 'http';import { createConnection } from '@playwright/mcp'; import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
http.createServer(async (req, res) => { // ...
// 創建一個具有 SSE 傳輸的無頭 Playwright MCP 服務器 const connection = await createConnection({ browser: { launchOptions: { headless: true } } }); const transport = new SSEServerTransport('/messages', res); await connection.sever.connect(transport);
// ... });
</details>
### 工具
#### 核心自動化
<details>
<summary><b>核心自動化</b></summary>
- **browser_click**
- 標題:點擊
- 描述:在網頁上執行點擊操作
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `ref` (字符串):頁面快照中確切的目標元素引用
- `doubleClick` (布爾值,可選):是否執行雙擊而不是單擊
- `button` (字符串,可選):要點擊的按鈕,默認為左鍵
- 只讀:**否**
- **browser_close**
- 標題:關閉瀏覽器
- 描述:關閉頁面
- 參數:無
- 只讀:**是**
- **browser_console_messages**
- 標題:獲取控制檯消息
- 描述:返回所有控制檯消息
- 參數:無
- 只讀:**是**
- **browser_drag**
- 標題:拖動鼠標
- 描述:在兩個元素之間執行拖放操作
- 參數:
- `startElement` (字符串):用於獲取與源元素交互權限的人類可讀元素描述
- `startRef` (字符串):頁面快照中確切的源元素引用
- `endElement` (字符串):用於獲取與目標元素交互權限的人類可讀元素描述
- `endRef` (字符串):頁面快照中確切的目標元素引用
- 只讀:**否**
- **browser_evaluate**
- 標題:評估 JavaScript
- 描述:在頁面或元素上評估 JavaScript 表達式
- 參數:
- `function` (字符串):() => { /* 代碼 */ } 或 (element) => { /* 代碼 */ }(當提供元素時)
- `element` (字符串,可選):用於獲取與元素交互權限的人類可讀元素描述
- `ref` (字符串,可選):頁面快照中確切的目標元素引用
- 只讀:**否**
- **browser_file_upload**
- 標題:上傳文件
- 描述:上傳一個或多個文件
- 參數:
- `paths` (數組):要上傳文件的絕對路徑。可以是單個文件或多個文件。
- 只讀:**否**
- **browser_handle_dialog**
- 標題:處理對話框
- 描述:處理對話框
- 參數:
- `accept` (布爾值):是否接受對話框。
- `promptText` (字符串,可選):在提示對話框的情況下輸入的文本。
- 只讀:**否**
- **browser_hover**
- 標題:懸停鼠標
- 描述:在頁面上懸停在元素上
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `ref` (字符串):頁面快照中確切的目標元素引用
- 只讀:**是**
- **browser_navigate**
- 標題:導航到 URL
- 描述:導航到指定 URL
- 參數:
- `url` (字符串):要導航到的 URL
- 只讀:**否**
- **browser_navigate_back**
- 標題:返回上一頁
- 描述:返回上一個頁面
- 參數:無
- 只讀:**是**
- **browser_navigate_forward**
- 標題:前進到下一頁
- 描述:前進到下一個頁面
- 參數:無
- 只讀:**是**
- **browser_network_requests**
- 標題:列出網絡請求
- 描述:返回自頁面加載以來的所有網絡請求
- 參數:無
- 只讀:**是**
- **browser_press_key**
- 標題:按下鍵
- 描述:在鍵盤上按下一個鍵
- 參數:
- `key` (字符串):要按下的鍵的名稱或要生成的字符,例如 `ArrowLeft` 或 `a`
- 只讀:**否**
- **browser_resize**
- 標題:調整瀏覽器窗口大小
- 描述:調整瀏覽器窗口大小
- 參數:
- `width` (數字):瀏覽器窗口的寬度
- `height` (數字):瀏覽器窗口的高度
- 只讀:**是**
- **browser_select_option**
- 標題:選擇選項
- 描述:在下拉菜單中選擇一個選項
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `ref` (字符串):頁面快照中確切的目標元素引用
- `values` (數組):要在下拉菜單中選擇的值的數組。可以是單個值或多個值。
- 只讀:**否**
- **browser_snapshot**
- 標題:頁面快照
- 描述:捕獲當前頁面的無障礙快照,這比截圖更好
- 參數:無
- 只讀:**是**
- **browser_take_screenshot**
- 標題:截圖
- 描述:對當前頁面進行截圖。你不能基於截圖執行操作,請使用 browser_snapshot 進行操作。
- 參數:
- `raw` (布爾值,可選):是否返回未壓縮的圖像(PNG 格式)。默認為 false,返回 JPEG 圖像。
- `filename` (字符串,可選):保存截圖的文件名。如果未指定,默認為 `page-{timestamp}.{png|jpeg}`。
- `element` (字符串,可選):用於獲取對元素進行截圖權限的人類可讀元素描述。如果未提供,將對視口進行截圖。如果提供了元素,也必須提供 ref。
- `ref` (字符串,可選):頁面快照中確切的目標元素引用。如果未提供,將對視口進行截圖。如果提供了 ref,也必須提供元素。
- `fullPage` (布爾值,可選):當為 true 時,對整個可滾動頁面進行截圖,而不是當前可見的視口。不能與元素截圖一起使用。
- 只讀:**是**
- **browser_type**
- 標題:輸入文本
- 描述:在可編輯元素中輸入文本
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `ref` (字符串):頁面快照中確切的目標元素引用
- `text` (字符串):要輸入到元素中的文本
- `submit` (布爾值,可選):是否提交輸入的文本(之後按 Enter 鍵)
- `slowly` (布爾值,可選):是否逐個字符輸入。對於觸發頁面中的按鍵處理程序很有用。默認情況下,整個文本一次性填充。
- 只讀:**否**
- **browser_wait_for**
- 標題:等待
- 描述:等待文本出現或消失,或等待指定時間過去
- 參數:
- `time` (數字,可選):要等待的時間(秒)
- `text` (字符串,可選):要等待出現的文本
- `textGone` (字符串,可選):要等待消失的文本
- 只讀:**是**
</details>
#### 標籤管理
<details>
<summary><b>標籤管理</b></summary>
- **browser_tab_close**
- 標題:關閉標籤
- 描述:關閉一個標籤
- 參數:
- `index` (數字,可選):要關閉的標籤的索引。如果未提供,則關閉當前標籤。
- 只讀:**否**
- **browser_tab_list**
- 標題:列出標籤
- 描述:列出瀏覽器標籤
- 參數:無
- 只讀:**是**
- **browser_tab_new**
- 標題:打開新標籤
- 描述:打開一個新標籤
- 參數:
- `url` (字符串,可選):在新標籤中要導航到的 URL。如果未提供,新標籤將為空。
- 只讀:**是**
- **browser_tab_select**
- 標題:選擇標籤
- 描述:按索引選擇一個標籤
- 參數:
- `index` (數字):要選擇的標籤的索引
- 只讀:**是**
</details>
#### 瀏覽器安裝
<details>
<summary><b>瀏覽器安裝</b></summary>
- **browser_install**
- 標題:安裝配置中指定的瀏覽器
- 描述:安裝配置中指定的瀏覽器。如果遇到瀏覽器未安裝的錯誤,請調用此工具。
- 參數:無
- 只讀:**否**
</details>
#### 基於座標的操作(通過 --caps=vision 啟用)
<details>
<summary><b>基於座標的操作(通過 --caps=vision 啟用)</b></summary>
- **browser_mouse_click_xy**
- 標題:點擊
- 描述:在給定位置點擊鼠標左鍵
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `x` (數字):X 座標
- `y` (數字):Y 座標
- 只讀:**否**
- **browser_mouse_drag_xy**
- 標題:拖動鼠標
- 描述:將鼠標左鍵拖動到給定位置
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `startX` (數字):起始 X 座標
- `startY` (數字):起始 Y 座標
- `endX` (數字):結束 X 座標
- `endY` (數字):結束 Y 座標
- 只讀:**否**
- **browser_mouse_move_xy**
- 標題:移動鼠標
- 描述:將鼠標移動到給定位置
- 參數:
- `element` (字符串):用於獲取與元素交互權限的人類可讀元素描述
- `x` (數字):X 座標
- `y` (數字):Y 座標
- 只讀:**是**
</details>
#### PDF 生成(通過 --caps=pdf 啟用)
<details>
<summary><b>PDF 生成(通過 --caps=pdf 啟用)</b></summary>
- **browser_pdf_save**
- 標題:保存為 PDF
- 描述:將頁面保存為 PDF
- 參數:
- `filename` (字符串,可選):保存 PDF 的文件名。如果未指定,默認為 `page-{timestamp}.pdf`。
- 只讀:**是**
</details>
替代品








