浏览器自动化服务器

一个基于Playwright的浏览器自动化服务器,提供结构化可访问性快照和基于角色的定位器,使LLM能够与网页交互。

  • by lequan310
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 lequan310/playwright-mcp-python

使用说明

Playwright MCP 服务器

一个模型上下文协议(MCP)服务器,通过使用(相关技术/方法)提供浏览器自动化功能 剧作家这个服务器使大型语言模型(LLMs)能够通过(某种方式)与网页进行交互 结构化无障碍快照 和 基于角色的定位器,从而绕过了需要截图或视觉调优模型的需求。

✨ 主要特点

  • 🎯(瞄准靶心) 基于角色的定位器使用可访问性树中的语义角色和名称,而非易变的CSS选择器
  • 📸(相机图标,通常表示拍照或照片) 自动快照每个操作都会自动返回更新后的页面状态
  • ♿ 代表无障碍设施的标志。 无障碍优先与屏幕阅读器以相同的方式与页面进行交互
  • 🚀 表情符号“🚀”在中文中通常被翻译为“火箭”或直接用其形象描述为“飞速上升”、“急速前进”等,具体翻译可能根据上下文有所不同。在这里,为了简洁明了,可以翻译为“火箭”或保持原样使用该表情符号。 由Playwright驱动利用Playwright强大的浏览器自动化功能

🚀 设置

先决条件

  • Python 3.13或更高版本
  • 紫外线 包管理器

安装

  1. 使用 Python 3.13 创建一个虚拟环境:
uv venv --python 3.13
  1. 安装依赖项:
uv sync
  1. 安装 Playwright 浏览器二进制文件:
playwright install chromium

🏃 运行服务器

开发模式(带检查器)

对于使用FastMCP检查器进行的本地开发和测试:

fastmcp dev src/server.py

这将启动一个交互式检查器,您可以在其中测试工具并实时查看浏览器交互情况。

对于单客户端模式:

python src/server.py

工具

Core automation
  • 浏览器点击

    • 标题:点击
    • 描述:在网页上执行点击操作
    • 参数:
      • element (字符串):人类可读的元素描述
      • locator (元素定位器):元素定位器 - 使用ARIA的AriaNode或(其他方式,此处根据上下文可能指非ARIA的定位方法,但原文未明确,故保留泛指) role 和 name 字段,或带有选择器的(功能/组件) selector 田野
      • nth (数字,可选):当多个元素匹配时,使用基于零的索引来指定(例如,nth=0 表示第一个,nth=1 表示第二个)
      • double_click (布尔值,可选):是否执行双击而不是单击
      • button (字符串,可选):要点击的按钮(左、右、中),默认为左键
      • modifiers (数组,可选):要按下的修饰键(Alt、Control、Meta、Shift)
    • 只读: 错误的
  • 浏览器关闭

    • 标题:关闭浏览器
    • 描述:关闭浏览器并清理所有资源
    • 参数:无
    • 只读: 错误的
  • 浏览器拖拽

    • 标题:拖动鼠标
    • 描述:在两个元素之间执行拖放操作
    • 参数:
      • start_element (字符串):人类可读的源元素描述
      • start_locator (ElementLocator): 源元素定位器 - 可以是带有ARIA的AriaNode role 和 name 字段,或者带有选择器的(部分) selector 田野
      • start_nth (数字,可选):当有多个匹配项时,源元素的零基索引
      • end_element (字符串):人类可读的目标元素描述
      • end_locator (ElementLocator): 目标元素定位器 - 可以是带有ARIA的AriaNode role 和 name 字段,或带有选择器的(部分) selector 田野;领域;场地
      • end_nth (数字,可选):当有多个匹配项时,目标元素的基于零的索引
    • 只读: 错误的
  • 浏览器文件上传

    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths (数组,可选):要上传的文件的绝对路径。如果省略,则取消文件选择器。
    • 只读: 错误的
  • 浏览器填写表单

    • 标题:填写表格
    • 描述:填写多个表单字段
    • 参数:
      • fields (array): 一个FormField对象的列表,每个对象都包含 element (字符串), value (字符串), locator (ElementLocator),以及可选参数 nth (数字)
    • 只读: 错误的
  • 获取浏览器HTML内容

    • 标题:获取HTML内容
    • 描述:当定位器失败时,获取HTML内容以进行调试
    • 参数:
      • selector (字符串,可选):用于从HTML中获取内容的CSS选择器(默认为body)
      • max_length (数字,可选):要返回的最大字符数(默认50000)
      • filter_tags (数组,可选):要移除的标签名称列表(例如,['script', 'style'])。默认值为 ['script']
    • 只读: 真
  • 获取浏览器文本内容

    • 标题:获取页面的文本内容
    • 描述:以Markdown格式获取页面的文本内容。在提取干净的文章文本时非常有用。
    • 参数:无
    • 只读: 真
  • 浏览器悬停

    • 标题:鼠标悬停
    • 描述:将鼠标悬停在页面上的元素上
    • 参数:
      • element (字符串):可读的人类元素描述
      • locator (ElementLocator): 元素定位器 - 可以是带有ARIA的AriaNode role 和 name 字段,或者带有选择器的(部分) selector 田野
      • nth (数字,可选):当有多个元素匹配时,使用基于零的索引来指定(例如,nth=0 表示第一个,nth=1 表示第二个)
    • 只读: 错误的
  • 浏览器导航

    • 标题:导航至URL
    • 描述:导航到一个URL
    • 参数:
      • url (字符串):要导航到的URL
    • 只读: 错误的
  • 浏览器返回上一页

    • 标题:回去
    • 描述:返回上一页
    • 参数:无
    • 只读: 错误的
  • 打开浏览器

    • 标题:打开浏览器
    • 描述:打开一个新的浏览器实例
    • 参数:无
    • 只读: 错误的
  • 按下浏览器按键

    • 标题:按下一个键
    • 描述:按下键盘上的一个键
    • 参数:
      • key (字符串):要按下的键名或要生成的字符,例如 ArrowLeft 或者 a
    • 只读: 错误的
  • 浏览器调整大小

    • 标题:调整浏览器窗口大小
    • 描述:调整浏览器窗口大小
    • 参数:
      • width (数字):浏览器窗口的宽度
      • height (数字):浏览器窗口的高度
    • 只读: 错误的
  • 浏览器搜索

    • 标题:在谷歌上搜索
    • 描述:使用谷歌搜索查找某个主题
    • 参数:
      • query (字符串):要搜索的查询或主题
    • 只读: 错误的
  • 选择浏览器选项

    • 标题:选择选项
    • 描述:在下拉菜单中选择一个选项
    • 参数:
      • element (字符串):人类可读的元素描述
      • values (array): 下拉列表中要选择的值的数组
      • locator (元素定位器):元素定位器 - 可以是带有ARIA属性的ARIA节点 role 并且 name 字段,或者带有选择器的(部分) selector 田野(或领域,根据上下文可灵活翻译)
      • nth (数字,可选):当多个元素匹配时,使用从零开始的索引(例如,nth=0 表示第一个,nth=1 表示第二个)
    • 只读: 错误的
  • 浏览器快照

    • 标题:页面快照
    • 描述:捕获当前页面的无障碍性快照
    • 参数:
      • locator (ElementLocator,可选):元素定位器 - 可以是带有ARIA的AriaNode role 和 name 字段,或者带有选择器的(部分) selector 田野
      • nth (数字,可选):当有多个元素匹配时,使用从零开始的索引(例如,nth=0 表示第一个,nth=1 表示第二个)
    • 只读: 真
  • 浏览器截图

    • 标题:截图
    • 描述:对当前页面进行截图
    • 参数:
      • type (字符串,可选):图像格式(png 或 jpeg)。默认为 png。
      • element (字符串,可选):人类可读的元素描述
      • locator (ElementLocator,可选):元素定位器 - 可以是带有ARIA的AriaNode role 并且 name 字段,或带有选择器的(部分) selector 田野;领域;现场;场地
      • nth (数字,可选):当有多个元素匹配时,使用从零开始的索引(例如,nth=0 表示第一个,nth=1 表示第二个)
      • full_page (布尔值,可选):对整个可滚动页面进行截图
    • 只读: 真
  • 浏览器类型

    • 标题:输入文本
    • 描述:在可编辑元素中输入文本
    • 参数:
      • element (字符串):人类可读的元素描述
      • text (字符串):要输入到元素中的文本
      • locator (元素定位器):元素定位器 - 可以是带有ARIA的AriaNode role 并且 name 字段,或带有选择器的(部分) selector 田野
      • nth (数字,可选):当有多个元素匹配时,使用基于零的索引(例如,nth=0 表示第一个,nth=1 表示第二个)
      • submit (布尔值,可选):是否提交(按回车键后)
      • slowly (布尔值,可选):是否每次输入一个字符
    • 只读: 错误的
  • 等待浏览器(完成操作)

    • 标题:等待浏览器
    • 描述:等待指定的秒数时间。
    • 参数:
      • time (int): 等待时间(秒)
    • 只读: 真
Tab management
  • 浏览器标签页
    • 标题:管理标签页
    • 描述:列出、创建、关闭或选择浏览器标签页
    • 参数:
      • action (字符串):要执行的操作(列出、创建、关闭、选择)
      • index (数字,可选):用于关闭/选择操作的标签页索引。如果省略关闭操作,则关闭当前标签页。
    • 只读: 错误的