关于 nodriver — Chrome browser automation
nodriver-mcp-server 使用 nodriver 自动化 Chrome,面向需要网页操作、数据提取和网络检查的 Agent。它提供隔离浏览器会话、可持久化配置文件和丰富的网络分析工具。
主要功能
- 01提供 70 个浏览器自动化工具
- 02独立浏览器会话与配置文件
- 03读取无障碍快照和页面内容
- 04检查网络请求并保存响应
- 05恢复标签页与持久化登录
- 06通过 CDP 控制 Chrome
适用场景
- 01自动填写网页表单并提取内容
- 02并行运行互不干扰的浏览器任务
- 03检查页面 API 流量和响应
- 04在持续会话中复用登录状态
MCP 相关
这是一个 MCP 服务,向 MCP 客户端提供 70 个 Chrome 浏览和自动化工具,并支持通过命令安装到多种客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx nodriver-mcpNODRIVER_HEADLESSRun Chrome headless (true/false). Default false.NODRIVER_USER_DATA_DIRExplicit persistent Chrome profile directory. Default: an ephemeral temp profile, auto-deleted per session.NODRIVER_BROWSER_PATHPath to the Chrome/Chromium executable. Auto-detected when unset.NODRIVER_PROXYProxy server address passed to Chrome as --proxy-server.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
70收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| browser | string | 否 | 要操作的浏览器。每个名称对应一个独立的 Chrome,首次使用时创建。省略则使用共享默认浏览器;并行 Agent 各自需要不同的名称。 |
详细介绍
nodriver-mcp-server
为你的 AI Agent 提供完整的 Chrome 工作区。 使用 nodriver 驱动的 70 个 MCP 工具,浏览网页、填写表单、提取数据并检查页面背后的请求。保留登录状态、并行运行彼此隔离的浏览器,并通过自动恢复标签页接续上次的工作。一条命令即可为 Claude、Claude Code、Cursor、Windsurf、Codex 和其他 Model Context Protocol 客户端完成设置。
关键词: MCP 服务 · 浏览器自动化 · undetected chromedriver · 反机器人 · 绕过 Cloudflare · 网页抓取 · Claude · Cursor · nodriver · chrome-devtools-mcp 替代方案 · Playwright/Puppeteer 替代方案 · AI Agent 工具。
更多浏览,减少设置
- 登录一次,随时回来继续使用。 持久化配置文件会在不同会话间保留 Cookie 和登录状态。
- 按你的方式启动。 打开新标签页、收藏的一组 URL,或上次留下的标签页——可通过 MCP 按配置文件单独设置。
- 为每项任务配备独立浏览器。 最多可运行 12 个彼此隔离的浏览器会话,不共享标签页、Cookie 或所选页面。
- 获取页面背后的数据。 读取无障碍快照、检查 API 流量,并保存响应正文以供后续搜索。
- 直接自动化操作真正的 Chrome。 nodriver 是
undetected-chromedriver的继任者,使用 CDP,无需 Selenium 或 ChromeDriver 二进制文件,旨在减少常见的自动化特征。
查看 70 个工具的参考文档,或通过 uvx nodriver-mcp 快速开始。
它真的能通过检测吗?证据如下
声称“无法检测”很容易,下面是此服务直接驱动页面时,标准指纹检测套件报告的结果。一行即可复现:让你的 Agent 访问 https://bot.sannysoft.com 并获取快照。
| 检查项 | 结果 |
|---|---|
bot.sannysoft.com — Intoli + 指纹检测套件 | 58 项检查,0 项失败 |
navigator.webdriver | false — 是 Navigator.prototype 上的布尔值,而非自身属性,与普通浏览器完全一致 |
window.chrome | 存在 |
navigator.plugins | 5 |
navigator.languages | 4 个条目 |
| User agent | 不含 Headless 标记 |
测试环境为 Chrome 151 / Windows 11、有头模式,使用默认配置文件。当前功能测试套件使用 Chrome 155 和 nodriver 0.50.6。关于如何解读指纹检测结果,请参阅范围与限制。
功能
- 🕵️ 直接通过 CDP 自动化 — nodriver 无需 Selenium 和 ChromeDriver 二进制文件,旨在减少常见的自动化信号。
- ☁️ Cloudflare 复选框辅助工具(
cf_verify,需要[cf]extra);是否成功取决于挑战和浏览器配置。 - 🖼️ 框架不再是盲区 —
list_frames与读取工具上的frame参数,以及take_snapshot将每个 iframe 的树插入到承载它的元素下方,因此其中的支付字段或同意提示层也会获得 uid,可以像其他元素一样点击和填写。 - 🔍 清晰记录事件的网络日志 — 状态、响应头、DevTools 风格的计时细目(DNS、连接、TLS、首字节时间、下载)、发起每个请求的脚本和行号、传输大小、重定向链路和失败信息,以及 WebSocket 帧和服务器发送事件。500、404、重定向和 DNS 故障会分别记录,而不会混为一谈。
- 💾 将响应捕获到磁盘 —
capture_bodies会从标签页、工作线程和服务工作线程捕获匹配的响应,避免后续导航或缓冲区清除将其丢弃。JSON 索引会记录 URL、POST 数据、状态和响应头;search_bodies可搜索保存的流量。捕获状态会报告已保存的响应体、跳过项和错误。 - 🛡️ 内置被动安全审查 —
audit_security检查安全响应头(包括真正的 CSP 分析:nonce、strict-dynamic、多项策略)、CORS、每个来源的 TLS 和证书、Cookie 标志、CDN 可能发送给错误用户的响应、页面通信的所有第一方和第三方,以及 Chrome 自身 Issues 面板报告的内容:CSP 违规、混合内容、被拒绝的 Cookie。inspect_storage会盘点 localStorage、sessionStorage、IndexedDB、Cache Storage 和服务工作线程,并解码找到的令牌。export_har会将所有内容写入 HAR 文件,供 Burp、ZAP 或 DevTools 使用,其中包括线上传输的响应头、Cookie 和 Set-Cookie。 - 👥 同时运行多个彼此隔离的浏览器 — 将
browser: "agent-a"传给任意工具,该名称便会拥有独立的 Chrome 及其进程、Cookie、标签页和 uid。并行 Agent 不会再抢占彼此选中的标签页。省略此参数则一切照旧:默认浏览器在服务进程中运行,与之前完全相同。工作原理 - 🧩 70 个工具,涵盖导航、输入、快照、截图、内容/PDF 导出、网络与控制台检查、设备模拟、Cookie/存储、会话、配置文件和性能跟踪。
- 🧠 为 Agent 而非仅为编译器编写的 Schema — 每个参数都有描述,固定值选项采用真正的枚举,每个工具还声明只读/破坏性提示。请参阅为何这很重要。
- 📄 紧凑的无障碍树快照(
take_snapshot)— 带有每个元素 uid 的可搜索页面文本。在 Hacker News 首页测得:27 KB,而未过滤时为 97 KB;缩小 72%,同时完整保留所有链接、URL 和文本。 同源 URL 会以相对于页面的形式输出,这不会造成信息损失,因为根节点保留了绝对 URL。每个 Agent 步骤都能节省这些内容。 - 🔗 连接到已登录的浏览器(
use_running_browser)— 通过调试端口驱动你真实的 Chrome 配置文件,而不是在新浏览器中重新登录。 - 📱 设备模拟(Pixel 7、iPad),并提供正确的 UA / 客户端提示。
- ✅ 可自行验证结果的操作 —
fill会读取并返回填写后的值,set_checked会读取并返回选中状态;若没有输入事件到达页面,click、press_key和type_text会报告这一情况。无法确认操作结果的工具会如实说明,而不会声称成功。 - 💾 保存/恢复会话 — 在不同运行之间保留登录状态。
- 🧬 默认临时,需要时可持久保存 — 每个会话都会使用自己的临时 Chrome 配置文件。命名的持久配置文件会保留登录状态,并提供可配置的启动方式:打开新标签页(默认)、打开指定 URL,或恢复上次的标签页,且无需点击恢复按钮。
- ⚡ 一条命令即可为 15 个以上的 MCP 客户端完成设置。
安装
# Recommended: isolated install, won't touch your global Python environment
uv tool install nodriver-mcp
# or with pip
pip install nodriver-mcp
# or run it without installing anything
uvx nodriver-mcp
第一种和第三种方式需要使用 uv。若要跟踪开发分支而非某个发行版:
uv tool install "nodriver-mcp @ git+https://github.com/andresolbach/nodriver-mcp-server.git@main"
此项目也已收录在官方 MCP Registry 中,名称为 io.github.andresolbach/nodriver-mcp-server,因此能够读取该注册表的客户端和市场可以直接发现并安装它。
使用上游
nodriver>=0.50.6,并已针对 Chrome 155 进行测试。uv tool install会将依赖项与全局 Python 环境隔离。
你还需要在本地安装 Google Chrome(会自动检测)。
升级
uv tool upgrade nodriver-mcp
要求与已测试版本
自动化测试套件会运行架构、文档和行为检查,以及真实浏览器集成测试。当前 Windows 浏览器测试环境为 Chrome 155 / nodriver 0.50.6 / Python 3.12.11。CI 也会在 macOS 和 Linux 上运行非浏览器测试。未来的 Chrome 或 nodriver 版本可能需要进行兼容性更新。
| 组件 | 要求 | 已验证版本 |
|---|---|---|
| Python | 3.12+ | 3.12.11 |
| Google Chrome | 任意近期稳定版 | 155.0.8059.79 |
| 操作系统 | Windows / macOS / Linux | Windows 11 |
nodriver | >= 0.50.6 | 0.50.6 |
mcp(MCP SDK) | >= 1.26.0, < 2 | 1.26.0 |
pillow | >= 12.1.1 | 12.1.1 |
tomli-w | >= 1.0.0 | 1.2.0 |
运行时依赖范围和已测试版本列于 requirements.txt。uv tool install 会创建隔离安装;贡献者可以在此代码库中使用 uv sync --locked --group dev,以复现已提交的依赖集。
一键配置 MCP 客户端
# Interactive client selector (terminal TUI)
nodriver-mcp install
# Install to specific clients
nodriver-mcp install claude,cursor,kiro
# Uninstall
nodriver-mcp uninstall claude
# List all supported clients
nodriver-mcp --list-clients
# Print MCP config JSON (for manual setup)
nodriver-mcp --config
# Project-level config (writes to .cursor/mcp.json, .mcp.json, etc.)
nodriver-mcp install --scope project
支持的客户端: Claude Desktop、Claude Code、Cursor、Windsurf、Codex、Gemini CLI、Copilot CLI、Kiro、VS Code、Cline、Roo Code、Amazon Q、Warp、Opencode、Trae。
Claude Code 的 VS Code 扩展与 Claude Code 共用配置(
~/.claude.json),因此安装到claude-code即可同时支持 CLI 和扩展。
手动配置
如果你想自行粘贴配置,以下内容适用于任何 MCP 客户端(claude_desktop_config.json、~/.claude.json、.cursor/mcp.json、.mcp.json 等):
{
"mcpServers": {
"nodriver": {
"command": "uvx",
"args": ["nodriver-mcp"]
}
}
}
环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
NODRIVER_HEADLESS | 无头模式(true/false) | false |
NODRIVER_USER_DATA_DIR | 指定持久化 Chrome 配置目录(覆盖默认值) | 临时配置目录,会在每个会话结束时自动删除 |
NODRIVER_BROWSER_PATH | Chrome 可执行文件路径 | 自动检测 |
NODRIVER_PROXY | 代理服务地址 | 无 |
NODRIVER_BROWSER_URL | 连接到已在此地址运行的 Chrome(例如 http://127.0.0.1:9222),而不是启动新实例 | 启动新实例 |
NODRIVER_ENABLE_TRANSLATE | 设为 true 可重新启用 Chrome 的 Google 翻译弹窗 | 已禁用 |
NODRIVER_ENABLE_EXTENSIONS | 设为 true 可允许外部安装的 Chrome 扩展程序(及其提示) | 已禁用 |
默认情况下,浏览器会以干净状态启动以进行自动化:Google 翻译弹窗会被隐藏,外部安装的 Chrome 扩展程序会被阻止(因此不会出现“某扩展程序需要你处理”的提示)。你可以通过上述环境变量重新启用它们,也可以在运行时使用 set_browser_flags 工具重新启用——该工具还可以通过 extra_args 参数设置任何其他 Chrome 启动标志(例如 --lang=de-DE、--window-size=1280,800)。如果 Chrome 在两次调用之间关闭或崩溃,浏览器也会自动恢复——工具会重新启动浏览器,而不是报错。
临时浏览器会从 about:blank 启动,避免新标签页流量进入网络日志。持久化配置默认打开新标签页,也可以打开指定 URL 或恢复之前的标签页;详见配置文件。new_page 会复用空白的启动标签页。
扩展
manage_extensions 可在运行时管理扩展:
manage_extensions("list")— 当前配置文件中已安装的扩展(名称、版本、ID)及其当前状态manage_extensions("on")/("off")— 总开关(--disable-extensions);会重启 Chrome。此开关也适用于未打包的扩展,因此"off"确实表示关闭manage_extensions("load", path)/("unload", path)— 从文件夹加载 / 卸载未打包的扩展
要永久使用扩展,请切换到持久化配置文件,在该浏览器中从 Chrome Web Store 安装一次,然后开启扩展;此后每次启动都会加载该扩展。
未打包的扩展需要 Chromium 或 Chrome for Testing。 官方 Chrome 构建在 v137 中移除了
--load-extension;截至 Chrome 151,--enable-unsafe-extension-debugging和停用DisableLoadExtensionCommandLineSwitch都无法恢复此功能——该标志会被接受,但扩展不会注册,而且没有任何提示。manage_extensions会检测品牌版构建并说明情况,而不会假装操作成功。如果需要加载未打包的扩展,请将NODRIVER_BROWSER_PATH指向 Chromium / Chrome for Testing。
多个 Agent,多个浏览器
如果只有一个 Agent 在工作,可以跳过本节:不使用 browser 参数时,所有操作都会在同一个共享浏览器中运行,与之前完全相同。
但是,如果让两个 Agent 使用同一个浏览器,它们就会互相干扰。它们共享当前选中的标签页,因此一个 Agent 调用 select_page 或进行导航,会悄无声息地改变另一个 Agent 看到的内容,而另一个 Agent 持有的所有 uid 都会失效。不会报错——第二个 Agent 只会在错误的页面上操作。
因此,每个工具都接受一个可选的 browser 参数;如果指定的名称尚不存在,就会立即创建一个:
{ "url": "https://example.com", "browser": "agent-a" }
每个名称对应一个独立进程中的独立 Chrome,拥有各自的配置文件、Cookie、标签页、快照 uid 以及控制台 / 网络捕获。隔离是由结构保证的,而非依赖谨慎操作:没有共享状态可引发冲突;某个 Chrome 卡住或崩溃,也不会影响其他浏览器。
默认情况下无需额外开销。"default" 在服务进程内部运行,因此,如果会话从未打开第二个浏览器,就仍然是同一个进程、同一条代码路径。只有额外的名称才会启动新进程。
| 工具 | |
|---|---|
list_browsers | 查看已打开的浏览器:名称、Chrome 是否正在运行、配置文件、标签页及其 URL。只报告状态,不会启动任何内容。 |
shutdown_browser | 退出某个浏览器的 Chrome 并释放其名称。close_browser 只会退出 Chrome,并保留该浏览器的配置文件和标志,供下次使用。 |
每个额外的浏览器都需要一个 Python 进程和一个完整的 Chrome——大约占用 200 MB,启动约需 1 秒。最多可同时打开 12 个浏览器,包括默认浏览器。两个调用方使用同一个名称时,仍会共享同一个 Chrome:隔离是按浏览器划分的,而非按调用方划分,因此并行运行的 Agent 各自都需要一个浏览器。
配置文件
默认情况下,每个浏览器都会启动 Chrome,并使用全新的临时配置文件;该配置文件会自动创建和删除。这也意味着,你可以同时从 Claude Desktop、Claude Code 和 VS Code 扩展运行 nodriver——每个实例都会获得独立的 Chrome,不会争用共享配置文件。无需配置、无需检测逻辑,也无需清理任何内容。
如果你想要在多个会话间复用登录状态,请创建一个命名的持久配置文件并切换到该配置文件:
list_profiles— 列出持久配置文件并显示当前激活的配置文件create_profile(name, activate=false, restore_tabs=false)— 创建可复用的配置文件;默认从新标签页启动use_profile(name)— 切换到持久配置文件(""/"temp"会切换回临时配置文件)use_temp_profile— 切换回全新的临时配置文件delete_profile(name)— 删除持久配置文件
持久配置文件存放在 ~/.nodriver-mcp/profiles/<name> 下。启动时默认打开新标签页。使用 use_profile(name) 选择配置文件,然后通过 MCP 选择启动行为:
set_browser_flags(startup_mode="new_tab", restart=False)
set_browser_flags(startup_mode="urls", startup_urls=["https://example.com", "https://example.org"], restart=False)
set_browser_flags(startup_mode="restore", restart=False)
set_browser_flags() # read the saved choice without changing anything
每项设置都会保存到该配置文件的 nodriver-startup.json 中,在 MCP 重启后仍然有效,并且优先于 Chrome 的启动偏好设置。restart=False 会保持当前标签页打开,并在下次启动浏览器时应用所选设置;默认值 restart=True 会立即关闭 Chrome,使下一项操作使用新设置。restore 会恢复上次打开的标签页,不会点击恢复提示,也不会添加额外的空白标签页。如果没有保存的 MCP 选项,则遵循 Chrome 明确设置的启动偏好。临时配置文件仍会以空白状态启动,且无法保存这些启动设置。重启 MCP 服务本身后,请使用 use_profile(name) 再次选择同一配置文件;配置文件选择仅对当前服务会话有效。你仍然可以通过 NODRIVER_USER_DATA_DIR 环境变量全局指定固定配置文件。
操控已登录的浏览器
Chrome 会锁定其 user-data-dir,因此,无法再次打开存有真实登录信息的配置文件。要使用该配置文件,可以连接到已经打开它的浏览器——这样就无需通过自动化重新登录所有网站。
自行启动 Chrome 一次:
# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\agent-profile"
# macOS / Linux
google-chrome --remote-debugging-port=9222 --user-data-dir=~/.config/agent-profile
然后连接浏览器:可以在运行时使用 use_running_browser(port=9222),也可以预先设置 NODRIVER_BROWSER_URL=http://127.0.0.1:9222。之后,每项工具都会操作该浏览器及其真实标签页。
连接期间,此服务绝不会关闭并非由它启动的浏览器:close_browser 和切换配置文件只会断开连接。使用 use_temp_profile 或 use_profile 可返回到自行启动的浏览器。
⚠️ 该配置文件中的内容也会对 Agent 开放。 其中登录的所有账户——邮件、银行、公司系统——都可以从这里访问,因为 Cookie 存储要么全部开放,要么全部不开放。请指定一个你愿意公开的配置文件,而不是日常使用的配置文件。
工具(70)
每个标签页都会自动启用网络收集。控制台收集需选择性启用:当你希望 list_console_messages / get_console_message 开始收集事件时,调用 enable_console_collection。这样一来,对于会检测是否连接了调试器的网站,默认不会启用 Runtime.enable()。
对于仅限移动设备访问的网站,将 device 直接传给 new_page(...) 或 navigate_page(...),这样首个真实请求就会携带移动设备信号。
click 会发送真实的 CDP 输入事件,因此页面会看到 isTrusted=true。由于事件按坐标派发,它会先将元素滚动到可见区域,再对元素内部的多个点进行命中测试,因为粘性页眉或 Cookie 横幅可能覆盖中心像素——在 docs.pypi.org 上,这会影响 54 个可见链接中的 43 个。如果没有任何点能命中元素,则由 if_covered 决定处理方式:"report"(默认值)会拒绝点击并指出遮挡物,页面保持不变,且会话不会被检测到;"synthetic_click" 会直接点击元素,可穿透任何遮挡物,但页面会看到 isTrusted=false。无论哪种情况,响应都会说明采用了哪种方式,因此可被检测到的点击绝不会悄无声息。
| 类别 | 工具 |
|---|---|
| 多个浏览器(2) | list_browsers · shutdown_browser |
| 输入自动化(12) | click · click_at · hover · fill · fill_form · set_checked · select_option · type_text · press_key · drag · upload_file · handle_dialog |
| 导航(10) | navigate_page · new_page · close_page · close_browser · list_pages · select_page · wait_for · wait_for_selector · scroll_page · scroll_to_selector |
| 快照与调试(12) | take_screenshot · take_snapshot · get_page_content · query_selector · list_frames · evaluate_script · get_computed_styles · save_pdf · enable_console_collection · disable_console_collection · list_console_messages · get_console_message |
| 网络监控(6) | list_network_requests · get_network_request · capture_bodies · search_bodies · export_har · block_resources |
| 安全审计(2) | audit_security · inspect_storage |
| 设备模拟(4) | emulate · emulate_device · reset_emulation · resize_page |
| 性能(3) | performance_start_trace · performance_stop_trace · take_memory_snapshot |
| Cookie 与存储(5) | get_cookies · set_cookie · clear_cookies · get_local_storage · set_local_storage |
| 会话管理(3) | save_session · load_session · list_sessions |
| 配置文件与浏览器(9) | list_profiles · create_profile · use_profile · use_temp_profile · use_running_browser · delete_profile · set_browser_flags · set_proxy · manage_extensions |
| 反检测辅助工具(2) | cf_verify · bypass_insecure_warning |
📖 完整工具参考 → — 查看每个工具的确切参数、类型、默认值和枚举值,内容直接根据实时架构生成。
为调用它的 Agent 而打造
MCP 工具的好坏,取决于模型能看到多少关于它的信息。大多数服务只提供一个名称、一句话说明和未指定类型的参数——让 Agent 猜它应该是 type="url" 还是 type="goto",还得浪费一次失败的调用才能知道答案。
这里,Schema 会替你处理这些工作:
- 每个参数都在 Schema 中附有说明——而不是藏在客户端可能永远不会显示的一大段说明文字里。全部 70 个工具的所有参数,无一例外(有测试验证这一点)。
- 固定值参数都是真正的枚举。
navigate_page(type=…)明确列出url、back、forward、reload。错误值会在到达 Chrome 之前就被校验拒绝,而不是返回一个需要 Agent 自行解读的错误。 - 声明了数值和数组的范围——
quality的范围是 0–100,wait_for(text=…)至少需要一个条目。 - 结构化参数都有类型。
fill_form提供{uid, value},而不是不透明的list[dict]。 - 每个工具都会声明行为提示(
readOnlyHint、destructiveHint、idempotentHint)。客户端会用这些提示来分组权限——因此客户端可以自动批准take_snapshot,同时仍对delete_profile提示用户确认。 - 说明会指出何时不该使用某个工具,并推荐更合适的工具。
take_screenshot会提示模型优先使用take_snapshot;click_at则会指向click。
与 chrome-devtools-mcp 的关系
本项目使用 nodriver 和 Python。chrome-devtools-mcp 是独立实现,其工具 API 也在持续演进。选择服务时,请对照当前的工具参考文档;名称相同并不意味着参数或行为完全一致。
此服务未实现 performance_analyze_insight、lighthouse_audit 或 screencast_start/stop。扩展程序管理可通过 manage_extensions 使用,但受上述 Chrome 版本限制约束。
使用场景
- 浏览并提取结构化内容:使用真实的 Chrome 会话;如果数据来自 API,还可以检查网络流量和响应正文。
- 让 AI Agent 浏览真实网页——Claude、Cursor、Windsurf 和其他 LLM Agent 可以登录、填写表单、点击、阅读页面并截屏。
- 自动化需要身份验证的工作流,并通过持久化配置文件在多个会话间复用登录状态。
- 由 LLM 驱动的网页研究与数据提取:使用精简的无障碍树快照,而不是脆弱的屏幕截图。
- 端到端 / QA 测试:使用设备模拟、网络与控制台检查以及性能跟踪。
- 作为 Playwright、Puppeteer 和 Selenium 的一款难以检测的替代方案,用于 Agent 式浏览。
常见问题
这是一个无法被检测到的 chrome-devtools-mcp 替代方案吗? 这是一个基于 nodriver 构建的替代方案,提供熟悉的浏览器工具以及额外的配置文件和网络功能。它并非完全兼容的 API 替代方案,也不保证网站无法检测到自动化操作。
它能绕过 Cloudflare 吗?
可选的 cf_verify 辅助工具会尝试处理受支持的 Cloudflare 复选框挑战。无法保证成功,也无法解决图片或文本 CAPTCHA 谜题。
我已经在使用 chrome-devtools-mcp 或 playwright-mcp,但总是被拦截。该如何切换?
在手动配置下添加服务条目,然后查看工具参考,并调整任何特定工具的提示词或脚本。你可以同时运行这两个服务。
网站在我的普通浏览器中可以正常运行,但在自动化环境中不行。为什么? 可能的原因包括配置文件或 Cookie 的差异、自动化信号、IP 信誉、请求频率以及应用错误。在认定问题出在驱动程序之前,请先比较网络日志和浏览器状态。
它能处理验证码吗?
可选的 cf_verify 辅助工具支持部分 Cloudflare 复选框挑战。它无法解决图片网格、文本 CAPTCHA 和 hCaptcha 谜题。
支持哪些客户端? 一条命令即可将其安装到 15+ 个 MCP 客户端:Claude Desktop、Claude Code、Cursor、Windsurf、Codex、Gemini CLI、Copilot CLI、Kiro、VS Code、Cline、Roo Code、Amazon Q、Warp、Opencode、Trae。
我可以同时在多个客户端中运行它吗? 可以。默认情况下,每个实例都使用自己的临时 Chrome 配置文件,因此 Claude Desktop、Claude Code 和 VS Code 扩展都能同时使用 nodriver,互不冲突。
使用无头浏览器还是可见浏览器?
默认使用真实的 Chrome 窗口;设置 NODRIVER_HEADLESS=true 即可启用无头模式。
如何在不同会话之间保留登录状态?
使用 create_profile 创建持久配置文件,并通过 use_profile 切换到该配置文件;或者使用 save_session / load_session。
它支持 Windows / macOS / Linux 吗? 该项目支持这三种系统。浏览器集成测试在搭载 Chrome 155 的 Windows 11 上运行;CI 会在 Windows、macOS 和 Linux 上运行非浏览器测试套件。
范围与限制
- 检测规避能力取决于网站和配置。上面的指纹检测结果记录了该环境中的检查情况,但不保证能够访问所有网站。IP 信誉、请求频率和会话状态也会产生影响。
cf_verify是用于处理受支持的 Cloudflare 复选框挑战的可选辅助工具,并非通用 CAPTCHA 服务。它无法解决图片网格、文本 CAPTCHA 和 hCaptcha 谜题。- 这是独立的工具 API,并非完全兼容的
chrome-devtools-mcp替代方案。迁移脚本或提示词时,请查阅工具参考。 - 持久配置文件一次只能由一个正在运行的浏览器使用。完整重启 MCP 服务后,请再次使用
use_profile选择同一配置文件以恢复使用。
更新日志
请参阅 CHANGES.md。版本 2.6.0 新增了按配置文件设置启动模式的功能,修复了浏览器正常关闭和标签页恢复问题,并将 nodriver 更新至 0.50.6。现有的网络捕获、被动安全检查和隔离浏览器会话仍可使用。
鸣谢
基于 Saber-CC 的 nodriver-mcp(MIT)。浏览器后端由 nodriver(ultrafunkamsterdam)提供。部分工具名称和工作流的灵感来自 chrome-devtools-mcp。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。