
MCP-Undetected-Chromedriver

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
: 导航到指定 URLbrowser_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
: 获取页面上的可见 HTMLbrowser_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")