Skip to content

MCP工具文档

概述

DrissionPage MCP Server 提供了丰富的浏览器自动化工具,基于 DrissionPage 和 FastMCP 框架构建。本文档详细介绍了所有可用的 MCP 工具及其使用方法。

工具分类

🌐 浏览器管理工具

connect_browser

连接到现有浏览器实例或启动新的浏览器。

参数:

  • port (int, 可选): 浏览器调试端口,默认 9222
  • headless (bool, 可选): 是否无头模式,默认 False
  • user_data_dir (str, 可选): 用户数据目录路径

返回: 浏览器连接状态信息

示例:

python
# 连接到默认端口的浏览器
connect_browser()

# 连接到指定端口的无头浏览器
connect_browser(port=9223, headless=True)

# 使用自定义用户数据目录
connect_browser(user_data_dir="/path/to/userdata")

new_tab

创建新的浏览器标签页。

参数:

  • url (str, 可选): 新标签页要打开的URL

返回: 新标签页创建结果

示例:

python
# 创建空白标签页
new_tab()

# 创建并导航到指定URL
new_tab(url="https://example.com")

导航到指定URL。

参数:

  • url (str, 必需): 目标URL

返回: 导航结果信息

示例:

python
navigate(url="https://www.google.com")

🎯 元素操作工具

click_element

点击页面元素(智能优化版)。

重要提示: 使用前请遵循标准化工作流程:

  1. 📸 先使用 take_screenshot() 确认目标元素存在
  2. 🔍 使用 get_dom_tree()find_elements() 分析页面结构
  3. 🎯 基于准确信息构建选择器,禁止猜测元素名称

参数:

  • selector (str, 必需): 元素选择器
  • selector_type (str, 可选): 选择器类型 (css, xpath, text),默认 "css"
  • index (int, 可选): 元素索引(多个匹配时),默认 0
  • smart_feedback (bool, 可选): 是否启用智能反馈,默认 True

选择器优先级:

  1. ID选择器:#element-id (最优先)
  2. CSS类选择器:.class-name
  3. 属性选择器:[data-testid="value"]
  4. XPath选择器://div[@class="example"]
  5. 文本匹配:仅作为辅助手段

示例:

python
# 点击ID为submit的按钮
click_element(selector="#submit", selector_type="css")

# 点击包含特定文本的元素
click_element(selector="提交", selector_type="text")

# 使用XPath选择器
click_element(selector="//button[@class='btn-primary']", selector_type="xpath")

input_text

在输入框中输入文本(智能优化版)。

参数:

  • selector (str, 必需): 输入框选择器
  • text (str, 必需): 要输入的文本内容
  • clear_first (bool, 可选): 是否先清空输入框,默认 True

示例:

python
# 在用户名输入框中输入文本
input_text(selector="#username", text="myusername")

# 在输入框中追加文本(不清空原内容)
input_text(selector="[name='message']", text="Hello World", clear_first=False)

get_element_text

获取元素文本内容(精确定位版)。

参数:

  • selector (str, 必需): 元素选择器

返回: 元素的文本内容

示例:

python
# 获取标题文本
get_element_text(selector="h1")

# 获取状态信息
get_element_text(selector=".status-message")

get_page_text

获取页面完整文本内容(预处理必备工具)。

用途:

  1. 🔍 在操作元素前,获取页面的完整文本信息
  2. 📋 为非多模态LLM提供详细的页面内容描述
  3. 🎯 帮助构建精确的元素选择器
  4. ✅ 确认页面加载完成和内容可用性

返回: 页面的完整可见文本内容(去除HTML标签)

示例:

python
# 获取当前页面的所有文本内容
page_content = get_page_text()

📸 截图工具

take_screenshot

截取页面截图(标准化工作流程第1步)。

参数:

  • filename (str, 可选): 截图文件名,自动生成时间戳命名
  • full_page (bool, 可选): 是否截取完整页面,默认 False(可视区域)
  • element_selector (str, 可选): 仅截取特定元素

返回: 截图保存路径和操作结果

示例:

python
# 截取可视区域
take_screenshot()

# 截取完整页面
take_screenshot(full_page=True)

# 截取特定元素
take_screenshot(element_selector="#main-content")

# 指定文件名
take_screenshot(filename="login_page.png")

get_screenshot_data

获取截图二进制数据。

参数:

  • format (str, 可选): 图片格式,默认 "png"

返回: 截图的二进制数据

示例:

python
# 获取PNG格式的截图数据
screenshot_data = get_screenshot_data(format="png")

🌳 DOM操作工具

get_dom_tree

获取DOM树结构(结构化分析工具)。

参数:

  • selector (str, 可选): 起始选择器,默认 "body"
  • max_depth (int, 可选): 最大遍历深度,默认 10

返回: 结构化的DOM树信息

示例:

python
# 获取整个页面的DOM结构
get_dom_tree()

# 获取特定区域的DOM结构
get_dom_tree(selector="#main-content", max_depth=5)

find_elements

查找页面元素(智能定位工具)。

参数:

  • selector (str, 必需): 元素选择器
  • selector_type (str, 可选): 选择器类型 (css, xpath, text),默认 "css"
  • limit (int, 可选): 返回元素数量限制,默认 10
  • include_similar (bool, 可选): 是否包含相似元素,默认 True

返回: 匹配元素的详细信息列表

示例:

python
# 查找所有按钮元素
find_elements(selector="button", selector_type="css")

# 查找包含特定文本的元素
find_elements(selector="登录", selector_type="text", limit=5)

# 使用XPath查找元素
find_elements(selector="//input[@type='text']", selector_type="xpath")

🌐 网络监控工具

enable_network_monitoring

启用网络监控。

参数:

  • filter_types (List[str], 可选): 需要监听的mimeType类型列表

返回: 启用结果

示例:

python
# 启用所有网络监控
enable_network_monitoring()

# 只监控JSON和图片请求
enable_network_monitoring(filter_types=["application/json", "image/png"])

get_network_logs

获取网络请求日志。

参数:

  • limit (int, 可选): 返回日志的最大数量,默认 50

返回: 网络日志数据

示例:

python
# 获取最近50条网络日志
get_network_logs()

# 获取最近100条网络日志
get_network_logs(limit=100)

📁 文件操作工具

save_page_source

保存页面源码到文件。

参数:

  • filename (str, 可选): 保存文件名,自动生成时间戳命名

返回: 保存结果信息

示例:

python
# 保存当前页面源码
save_page_source()

# 指定文件名保存
save_page_source(filename="homepage.html")

get_cookies

获取当前页面的Cookies。

返回: 当前页面的所有Cookie信息

示例:

python
# 获取当前页面的所有Cookie
cookies = get_cookies()

⚡ JavaScript执行工具

execute_javascript

执行JavaScript代码。

参数:

  • code (str, 必需): 要执行的JavaScript代码
  • return_result (bool, 可选): 是否返回执行结果,默认 True

返回: JavaScript执行结果

示例:

python
# 执行简单的JavaScript代码
execute_javascript(code="document.title")

# 执行复杂的JavaScript操作
execute_javascript(code="""
    const elements = document.querySelectorAll('.item');
    return elements.length;
""")

# 修改页面元素
execute_javascript(code="document.getElementById('myButton').click()")

🔧 CDP命令工具

run_cdp_command

执行Chrome DevTools Protocol命令。

参数:

  • command (str, 必需): CDP命令名称
  • **params: CDP命令参数

返回: CDP命令执行结果

示例:

python
# 停止页面加载
run_cdp_command(command="Page.stopLoading")

# 导航到指定URL
run_cdp_command(command="Page.navigate", url="https://example.com")

# 获取页面性能指标
run_cdp_command(command="Performance.getMetrics")

最佳实践工作流程

标准化操作流程

  1. 📸 视觉确认 - 使用 take_screenshot() 获取页面截图
  2. 📄 文本分析 - 使用 get_page_text() 获取页面文本内容
  3. 🌳 结构分析 - 使用 get_dom_tree() 分析页面DOM结构
  4. 🔍 元素定位 - 使用 find_elements() 精确定位目标元素
  5. 🎯 执行操作 - 使用 click_element()input_text() 执行具体操作

选择器构建原则

  1. 优先级顺序:

    • ID选择器:#element-id
    • CSS类选择器:.class-name
    • 属性选择器:[data-testid="value"]
    • XPath选择器://div[@class="example"]
    • 文本匹配:仅作为辅助手段
  2. 禁止行为:

    • 禁止猜测元素名称或选择器
    • 禁止使用未经验证的选择器
    • 禁止跳过预处理步骤直接操作

错误处理和调试

  1. 操作失败时:

    • 重新截图确认页面状态
    • 检查DOM结构是否发生变化
    • 验证选择器是否仍然有效
    • 查看网络日志排查异步加载问题
  2. 性能优化:

    • 利用浏览器内置缓存机制提升页面加载速度
    • 合理设置元素查找限制 (limit)
    • 适当控制DOM树深度 (max_depth)

配置和环境

环境变量

  • DRISSIONPAGE_MCP_LOG_LEVEL: 日志级别,默认 "INFO"
  • DRISSIONPAGE_MCP_BROWSER_PATH: 浏览器可执行文件路径
  • DRISSIONPAGE_MCP_DOWNLOAD_PATH: 下载文件保存路径
  • DRISSIONPAGE_MCP_SCREENSHOT_PATH: 截图保存路径
  • DRISSIONPAGE_MCP_HEADLESS: 是否启用无头模式,默认 "false"
  • DRISSIONPAGE_MCP_TIMEOUT: 操作超时时间,默认 "30"

默认配置

json
{
  "browser": {
    "debug_port": 9222,
    "headless": false,
    "window_size": [1920, 1080],
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
  },
  "screenshot": {
    "format": "png",
    "quality": 90,
    "full_page": false
  },
  "performance": {
    "element_wait_timeout": 10,
    "page_load_timeout": 30,
    "script_timeout": 30
  }
}

常见问题

Q: 如何处理动态加载的内容?

A: 使用网络监控工具监听AJAX请求,结合适当的等待策略和重试机制。

Q: 选择器失效怎么办?

A: 重新分析DOM结构,使用更稳定的选择器(如ID或data属性),避免依赖易变的class名称。

Q: 如何提高操作成功率?

A: 严格遵循标准化工作流程,充分利用预处理工具,避免盲目猜测元素选择器。

Q: 无头模式下截图异常?

A: 确保设置了合适的窗口大小,某些页面在无头模式下渲染可能有差异。


Released under the MIT License