mcpField
N
nodriver — Chrome browser automation

nodriver — Chrome browser automation

本地服务
pypi.org浏览器自动化62 周前更新

关于 nodriver — Chrome browser automation

nodriver-mcp-server 使用 nodriver 自动化 Chrome,面向需要网页操作、数据提取和网络检查的 Agent。它提供隔离浏览器会话、可持久化配置文件和丰富的网络分析工具。

主要功能

  1. 01提供 70 个浏览器自动化工具
  2. 02独立浏览器会话与配置文件
  3. 03读取无障碍快照和页面内容
  4. 04检查网络请求并保存响应
  5. 05恢复标签页与持久化登录
  6. 06通过 CDP 控制 Chrome

适用场景

  1. 01自动填写网页表单并提取内容
  2. 02并行运行互不干扰的浏览器任务
  3. 03检查页面 API 流量和响应
  4. 04在持续会话中复用登录状态

MCP 相关

这是一个 MCP 服务,向 MCP 客户端提供 70 个 Chrome 浏览和自动化工具,并支持通过命令安装到多种客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"andresolbach-nodriver": {
"command": "uvx",
"args": [
"nodriver-mcp"
],
"env": {
"NODRIVER_HEADLESS": "<NODRIVER_HEADLESS>",
"NODRIVER_USER_DATA_DIR": "<NODRIVER_USER_DATA_DIR>",
"NODRIVER_BROWSER_PATH": "<NODRIVER_BROWSER_PATH>",
"NODRIVER_PROXY": "<NODRIVER_PROXY>"
}
}
}
}
启动命令uvx nodriver-mcp
需要配置的环境变量
NODRIVER_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypinodriver-mcp2.6.1

工具

70

收录的工具列表 · 更新于 2 周前

参数类型必填说明
browserstring否要操作的浏览器。每个名称对应一个独立的 Chrome,首次使用时创建。省略则使用共享默认浏览器;并行 Agent 各自需要不同的名称。

详细介绍

nodriver-mcp — 浏览器标签页字标

nodriver-mcp-server

为你的 AI Agent 提供完整的 Chrome 工作区。 使用 nodriver 驱动的 70 个 MCP 工具,浏览网页、填写表单、提取数据并检查页面背后的请求。保留登录状态、并行运行彼此隔离的浏览器,并通过自动恢复标签页接续上次的工作。一条命令即可为 Claude、Claude Code、Cursor、Windsurf、Codex 和其他 Model Context Protocol 客户端完成设置。

PyPI CI License: MIT Python 3.12+ MCP compatible Tools: 70 Stars

关键词: 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 检测结果:所有检查均为绿色

检查项结果
bot.sannysoft.com — Intoli + 指纹检测套件58 项检查,0 项失败
navigator.webdriverfalse — 是 Navigator.prototype 上的布尔值,而非自身属性,与普通浏览器完全一致
window.chrome存在
navigator.plugins5
navigator.languages4 个条目
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 版本可能需要进行兼容性更新。

组件要求已验证版本
Python3.12+3.12.11
Google Chrome任意近期稳定版155.0.8059.79
操作系统Windows / macOS / LinuxWindows 11
nodriver>= 0.50.60.50.6
mcp(MCP SDK)>= 1.26.0, < 21.26.0
pillow>= 12.1.112.1.1
tomli-w>= 1.0.01.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_PATHChrome 可执行文件路径自动检测
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。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。