产品定位
Playwright MCP Server 是一个浏览器自动化服务,旨在通过 MCP 协议提供对浏览器实例的全面控制,支持多页面管理、导航、内容检索、交互等多种功能。
核心功能
多页面管理 :支持打开、关闭、切换和列出多个浏览器页面/标签。
导航功能 :包括跳转到 URL、前进/后退、重新加载等。
内容检索 :获取 HTML、文本内容、标题和当前 URL。
交互功能 :点击、填充、键入、按键、勾选/取消勾选、选择选项、悬停、拖放等。
等待功能 :等待元素、URL、加载状态等。
状态和信息 :获取元素状态、属性、边界框等。
视觉功能 :页面和元素的截图。
JavaScript 执行 :执行任意 JavaScript 代码(需谨慎使用)。
适用场景
自动化测试
网页数据抓取
网页内容交互模拟
多页面浏览器任务管理
工具列表
页面管理
工具
描述
playwright_open_page
打开一个新的浏览器页面/标签
playwright_close_page
关闭特定页面或当前页面
playwright_switch_page
使特定页面变为活动页面
playwright_list_pages
列出所有打开的页面
导航
工具
描述
playwright_goto
导航到指定 URL
playwright_go_back
在历史记录中后退
playwright_go_forward
在历史记录中前进
playwright_reload
重新加载当前页面
内容检索
工具
描述
playwright_get_content
获取完整的 HTML 内容
playwright_get_text_content
获取页面或元素的文本内容
playwright_get_title
获取页面标题
playwright_get_url
获取当前 URL
交互
工具
描述
playwright_click
点击元素
playwright_fill
填充表单字段
playwright_type
模拟键盘输入文本
playwright_press
按下键盘按键
playwright_check
勾选复选框或单选按钮
playwright_uncheck
取消勾选复选框
playwright_select_option
选择下拉选项
playwright_hover
悬停在元素上
playwright_scroll_into_view
将元素滚动到视图中
playwright_set_input_files
上传文件到文件输入框
playwright_drag_and_drop
拖放一个元素到另一个元素
等待
工具
描述
playwright_wait_for_selector
等待元素达到特定状态
playwright_wait_for_url
等待 URL 匹配特定模式
playwright_wait_for_load_state
等待特定加载状态
playwright_sleep
暂停执行
状态和信息
工具
描述
playwright_get_element_state
获取元素的可见性、启用状态等
playwright_get_attribute
获取属性值
playwright_get_bounding_box
获取元素位置和尺寸
playwright_get_computed_style
获取计算后的 CSS 属性
视觉
工具
描述
playwright_take_screenshot
截取页面截图
playwright_take_element_screenshot
截取元素截图
JavaScript
工具
描述
playwright_evaluate
评估 JavaScript 并返回结果
playwright_execute_javascript
执行 JavaScript 无返回值
常见问题解答
安全性问题 :playwright_evaluate 和 playwright_execute_javascript 工具功能强大,但如果服务器公开暴露,可能会带来安全风险。建议谨慎使用或禁用这些功能。
使用教程
使用依赖
安装前置依赖:
复制 pip install "fastmcp>=2.0.0" playwright
安装 Playwright 浏览器:
复制 playwright install chromium
安装教程
运行服务器:
复制 fastmcp run main.py --transport sse --port 8001
运行客户端脚本:
复制 python client_example.py
调试方式
运行客户端脚本后,可以通过调用不同的工具来调试浏览器行为。例如:
复制 import asyncio
from fastmcp import Client
async def main():
async with Client("stdio://python main.py") as client:
# Open a new page and navigate to a website
page_info = await client.call_tool("playwright_open_page", {"url": "https://example.com"})
# Get the page title
title = await client.call_tool("playwright_get_title", {})
print(f"Page title: {title}")
# Click a button
await client.call_tool("playwright_click", {"selector": "button.submit"})
# Take a screenshot
screenshot = await client.call_tool("playwright_take_screenshot", {"full_page": True})
if __name__ == "__main__":
asyncio.run(main())