MCP无痕Chrome驱动
一种MCP服务,能够在绕过反机器人检测机制的情况下自动控制Chrome浏览器,从而在具有复杂机器人防护的网站上实现网页抓取、测试和自动化。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"mcp-undetected-chromedriver": {
"args": [
"-y",
"@smithery/cli@latest",
"run",
"@dragons96/mcp-undetected-chromedriver",
"--config",
"{}"
],
"command": "npx"
}
}
}
服务介绍
MCP-Undetected-Chromedriver
基于 undetected-chromedriver 构建的MCP服务,提供全面的接口以实现自动化控制Chrome浏览器并绕过反爬虫检测。
安装
要通过Smithery自动为Claude Desktop安装MCP-Undetected-Chromedriver:
npx -y @smithery/cli install @dragons96/mcp-undetected-chromedriver --client claude
配置使用Undetected Chromedriver服务器
以下是使用Undetected-chromedriver服务器的Claude Desktop配置:
{
"mcpServers": {
"mcp-undetected-chromedriver": {
"command": "npx",
"args": [
"-y",
"@smithery/cli@latest",
"run",
"@dragons96/mcp-undetected-chromedriver",
"--config",
"{}"
]
}
}
}
系统要求
- Python >= 3.11
- Chrome浏览器
使用uv安装
# Create virtual environment
uv venv
# Activate virtual environment
# Windows
.venv\Scripts\activate
# Linux/MacOS
source .venv/bin/activate
# Install dependencies
uv pip install -e .
项目介绍
MCP-Undetected-Chromedriver 是一个MCP(多通道协议)服务,将undetected-chromedriver库的功能封装成一系列易于使用的API。该项目特别适用于需要在自动化测试、数据抓取或网页自动化脚本中绕过现代网站反爬虫检测机制的场景。
主要特性
- 基于undetected-chromedriver,有效绕过网站反爬虫检测
- 提供丰富的浏览器操作API接口
- 支持截图、PDF导出等功能
- 支持点击、表单填写、拖拽等复杂的页面交互操作
- 无缝集成到MCP生态系统中的其他工具
待办事项列表
- 优化浏览器驱动管理并处理驱动中断
- 扩展API功能
- 添加更全面的错误处理和日志记录
- 改进文档,提供更多使用示例
- 添加对浏览器配置文件和扩展的支持
使用方法
启动服务
mcp-server-undetected-chromedriver
可用API
该服务提供了以下主要API接口:
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
代码示例
from mcp.client import Client
# Create MCP client
client = Client()
client.start("undetected-chromedriver-mcp-server")
# Navigate to website
response = client.call("browser_navigate", {"url": "https://example.com"})
print(response)
# Take a screenshot
response = client.call("browser_screenshot", {"name": "example"})
print(response)
# Get page text
response = client.call("browser_get_visible_text")
print(response.content[0].text)
# Close the browser
client.call("browser_close")
工作原理
此服务使用 undetected-chromedriver 库创建了一个专门的 Chrome 浏览器实例,该实例能有效规避常见的反爬虫检测机制。该服务通过 MCP 协议封装了这些功能,提供了一个易于使用的 API 接口,使自动化测试和网页抓取变得更加方便。
许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
贡献指南
欢迎在 GitHub Issues 页面提交错误报告和功能请求。如果您想贡献代码,请先创建一个问题来讨论您的想法。
常见问题解答
问:为什么选择 undetected-chromedriver 而不是标准的 selenium webdriver?
答:undetected-chromedriver 是专门为绕过现代网站(如 Cloudflare、Distil Networks 等)的反爬虫检测机制而设计的,在数据抓取和自动化测试场景中更加可靠。
问:服务如何处理浏览器实例?
答:服务维护一个全局的浏览器实例,当首次调用需要浏览器的 API 时会自动创建。可以使用 browser_close API 显式关闭浏览器。
问:如何处理 iframes 内的元素?
答:browser_iframe_click API 可以直接操作 iframes 内的元素,无需手动切换框架上下文。