開發日常記錄MCP Server:Playwright 瀏覽器自動化
最近在研究如何讓大語言模型(LLM)更高效地操作網頁,發現了 Playwright MCP 這個神器。它基于 Playwright 實現了瀏覽器自動化的 MCP 協議,能讓 LLM 通過結構化數據與網頁交互,不用依賴截圖或視覺模型,對開發者非常友好。記錄一下這個工具的核心功能和使用心得,方便后續復盤。
一、核心特性:結構化交互的優勢
Playwright MCP 最大的亮點是基于 可訪問性樹(Accessibility Tree) 的交互模式,和傳統的像素級操作不同,它直接通過網頁的語義結構(如標簽、屬性、文本)來定位元素,避免了截圖識別的不確定性。實測下來,這種方式有幾個明顯優勢:
- 輕量高效:不需要處理圖像數據,傳輸和解析速度更快,資源占用低。
- LLM 友好:返回的頁面快照是純 JSON 結構化數據,LLM 可以直接理解元素層級和屬性,省去了視覺模型的集成成本。
- 操作確定性強:通過元素引用(
ref)精確定位,不會因為頁面布局微小變化導致操作失敗,適合自動化場景。
另外,它支持兩種模式:
- 持久化配置:默認存儲登錄狀態等數據,適合需要保持會話的場景(比如自動填表)。
- 隔離模式:每次會話獨立,關閉后狀態清空,適合安全要求高或一次性任務(如臨時數據抓取)。
二、配置與部署:快速啟動的幾種方式
推薦使用新器集的MCP客戶端。主要有以下幾個優點,同時也是解決了如今MCP的幾個痛點:
- 不同的MCP Server認證方式多樣
- 編程語言多樣化,有時候找到了想要的MCP Server,卻無法集成到應用中
- 還有老生常談的問題,多個MCP Server的可維護性不好,降低開發效率
- 沒有調用日志,無法知曉MCP Server到底做了什么,甚至報錯了也不知道原因
- 各個MCP Server的實現方式不一,有的通過命令行參數啟動,有的通過環境變量,有的直接輸出所有結果,有的通過SSE方式
- 就算集成了,也無法知曉用戶的調用日志,也就沒辦法做后續的數據統計分析
- 還有如果客戶端集成MCP Server會增加應用程序打包尺寸,特別是手機應用客戶端的大小
三、工具列表:從基礎操作到高級功能
整理了常用工具的使用場景,方便快速查找:
1. 基礎操作
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
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_press_key |
按鍵操作 | 模擬鍵盤按鍵操作 | - key: 按鍵名稱(如 ArrowLeft 或字符 a) |
? |
browser_wait_for |
等待條件 | 等待文本出現/消失或指定時間流逝 | - time: 等待時間(秒,可選)- text: 等待出現的文本(可選)- textGone: 等待消失的文本(可選) |
? |
browser_file_upload |
文件上傳 | 上傳一個或多個文件 | - paths: 要上傳文件的絕對路徑數組 |
? |
browser_handle_dialog |
對話框處理 | 處理頁面對話框(確認/取消/輸入) | - accept: 是否接受對話框- promptText: 提示框輸入文本(可選) |
? |
2. 導航操作
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
browser_navigate |
頁面導航 | 導航到指定URL | - url: 目標URL |
? |
browser_navigate_back |
返回上一頁 | 導航到歷史記錄的上一頁 | 無 | ? |
browser_navigate_forward |
前進到下一頁 | 導航到歷史記錄的下一頁 | 無 | ? |
3. 資源操作
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
browser_take_screenshot |
截圖 | 捕獲當前頁面截圖(不可用于交互,僅用于查看) | - raw: 是否返回無損PNG格式(可選)- filename: 保存文件名(可選)- element: 元素描述(可選,需配合 ref)- ref: 元素引用(可選,需配合 element) |
? |
browser_pdf_save |
保存為PDF | 將當前頁面保存為PDF文件 | - filename: 保存文件名(可選) |
? |
browser_network_requests |
網絡請求列表 | 返回自頁面加載以來的所有網絡請求記錄 | 無 | ? |
browser_console_messages |
控制臺消息 | 返回頁面的所有控制臺消息 | 無 | ? |
4. 實用工具
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
browser_install |
安裝瀏覽器 | 安裝配置文件中指定的瀏覽器 | 無 | ? |
browser_close |
關閉瀏覽器 | 關閉當前頁面 | 無 | ? |
browser_resize |
調整窗口大小 | 調整瀏覽器窗口尺寸 | - width: 寬度(像素)- height: 高度(像素) |
? |
5. 標簽頁管理
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
browser_tab_list |
列出標簽頁 | 獲取當前所有打開的標簽頁列表 | 無 | ? |
browser_tab_new |
新建標簽頁 | 打開一個新標簽頁 | - url: 新標簽頁導航的URL(可選) |
? |
browser_tab_select |
切換標簽頁 | 通過索引選擇指定標簽頁 | - index: 標簽頁索引(從0開始) |
? |
browser_tab_close |
關閉標簽頁 | 關閉指定標簽頁(默認關閉當前標簽頁) | - index: 標簽頁索引(可選) |
? |
6. 測試工具
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
browser_generate_playwright_test |
生成測試用例 | 根據操作步驟生成Playwright測試代碼 | - name: 測試名稱- description: 測試描述- steps: 測試步驟數組 |
? |
7. 視覺模式(Vision Mode)
| 工具名稱 | 中文標題 | 功能描述 | 參數說明 | 只讀 |
|---|---|---|---|---|
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_press_key |
按鍵操作 | 模擬鍵盤按鍵操作(同基礎操作) | - key: 按鍵名稱(如 ArrowLeft 或字符 a) |
? |
browser_wait_for |
等待條件 | 等待文本出現/消失或指定時間流逝(同基礎操作) | - time: 等待時間(秒,可選)- text: 等待出現的文本(可選)- textGone: 等待消失的文本(可選) |
? |
browser_file_upload |
文件上傳 | 上傳一個或多個文件(同基礎操作) | - paths: 要上傳文件的絕對路徑數組 |
? |
browser_handle_dialog |
對話框處理 | 處理頁面對話框(確認/取消/輸入,同基礎操作) | - accept: 是否接受對話框- promptText: 提示框輸入文本(可選) |
? |
四、踩坑記錄與最佳實踐
- 元素定位問題:
- 建議加上--isolated參數,這樣可以啟動多個瀏覽器實例。
- 如果頁面動態加載元素,需要用
browser_wait_for等待元素出現后再操作。
- 會話管理:
- 持久化模式下,用戶數據目錄可能有權限問題,建議用絕對路徑指定
--user-data-dir。 - 隔離模式適合無狀態任務,但每次都需要重新登錄,可通過
--storage-state傳入已保存的登錄狀態。
- 持久化模式下,用戶數據目錄可能有權限問題,建議用絕對路徑指定
- 性能優化:
- 無頭模式(
headless: true)性能更好,生產環境建議默認開啟。 - 批量操作時,盡量合并連續的工具調用,減少通信開銷。
- 無頭模式(
五、適合什么樣的開發場景?
Playwright MCP 讓 LLM 操作網頁變得像調用 API 一樣簡單,尤其適合以下場景:
- 自動化測試:生成 Playwright 測試用例,結合 LLM 自動編寫測試邏輯。
- 數據抓取:結構化提取網頁信息,避免反爬機制(相比截圖方案更隱蔽)。
- 辦公自動化:自動填寫表單、生成報告、批量處理網頁任務(如批量發布文章)。
后續可以嘗試和 LangChain 結合,做一個智能網頁助手,比如讓 LLM 分析網頁內容后自動生成摘要或執行操作。

浙公網安備 33010602011771號