MCP-Undetected-Chromedriver

MCP-Undetected-Chromedriver

site icon
2025.04.21 3
Python浏览器自动化数据抓取自动化测试浏览器自动化
MCP-Undetected-Chromedriver 是一个基于 undetected-chromedriver 的 MCP 服务,提供了一套全面的接口用于自动化控制 Chrome 浏览器,同时绕过反机器人检测机制。该项目特别适用于需要绕过现代网站反机器人检测机制的自动化测试、数据抓取或网页自动化脚本场景。
View on GitHub

Overview

基本能力

产品定位

MCP-Undetected-Chromedriver 是一个专门用于浏览器自动化的 MCP 服务,专注于绕过现代网站的反机器人检测机制。

核心功能

  • 基于 undetected-chromedriver,有效绕过网站反机器人检测
  • 提供丰富的浏览器操作 API 接口
  • 支持截图、PDF 导出等功能
  • 支持点击、表单填写、拖拽等复杂页面交互操作
  • 与 MCP 生态系统中的其他工具无缝集成

适用场景

  • 自动化测试
  • 数据抓取
  • 网页自动化脚本

工具列表

  • browser_navigate: 导航到指定 URL
  • browser_screenshot: 对当前页面进行截图
  • browser_click: 点击页面元素
  • browser_iframe_click: 点击 iframe 内的元素
  • browser_fill: 在输入框中填写内容
  • browser_select: 在下拉选择框中选择选项
  • browser_hover: 鼠标悬停在元素上
  • browser_evalute: 执行 JavaScript 代码
  • browser_close: 关闭浏览器
  • browser_get_visible_text: 获取页面上的可见文本
  • browser_get_visible_html: 获取页面上的可见 HTML
  • browser_go_back: 在浏览器历史中后退
  • browser_go_forward: 在浏览器历史中前进
  • browser_drag: 拖拽元素
  • browser_press_key: 模拟按键
  • browser_save_as_pdf: 将页面保存为 PDF

常见问题解答

Q: 为什么选择 undetected-chromedriver 而不是标准的 selenium webdriver? A: undetected-chromedriver 专门设计用于绕过现代网站的反机器人检测机制,如 Cloudflare、Distil Networks 等,使其在数据抓取和自动化测试场景中更加可靠。

Q: 服务如何处理浏览器实例? A: 服务维护一个全局浏览器实例,当首次调用需要浏览器的 API 时自动创建。可以使用 browser_close API 显式关闭浏览器。

Q: 如何处理 iframe 内的元素? A: browser_iframe_click API 可以直接操作 iframe 内的元素,无需手动切换 frame 上下文。

使用教程

使用依赖

  • Python >= 3.11
  • Chrome 浏览器

安装教程

通过 Smithery 自动安装:

npx -y @smithery/cli install @dragons96/mcp-undetected-chromedriver --client claude

使用 uv 安装:

# 创建虚拟环境
uv venv

# 激活虚拟环境
# Windows
.venv\Scripts\activate
# Linux/MacOS
source .venv/bin/activate

# 安装依赖
uv pip install -e .

调试方式

启动服务:

mcp-server-undetected-chromedriver

代码示例:

from mcp.client import Client

# 创建 MCP 客户端
client = Client()
client.start("undetected-chromedriver-mcp-server")

# 导航到网站
response = client.call("browser_navigate", {"url": "https://example.com"})
print(response)

# 截图
response = client.call("browser_screenshot", {"name": "example"})
print(response)

# 获取页面文本
response = client.call("browser_get_visible_text")
print(response.content[0].text)

# 关闭浏览器
client.call("browser_close")

许可证

该项目遵循 MIT 开源许可条款,请参阅 MIT 了解完整条款。