nodriver vs Patchright:Python中的无检测浏览器自动化
Advanced Bot Mitigation Engineer
简要总结:
- nodriver 和 Patchright 是驱动级的无检测自动化工具 — 它们隐藏了将会话标记为自动化的信号,而不是像 Obscura 或 Lightpanda 那样提供新的浏览器引擎。
- nodriver 是 undetected-chromedriver 的继任者:一个异步 Python 框架,直接与 Chrome DevTools 协议对话,无需 Selenium 和
chromedriver二进制文件,因此经典的 webdriver 信号在设计上就被去掉了。它是 AGPL-3.0 许可证,并且获得了超过 4,000 个 GitHub 星标。 - Patchright 是 Playwright Python 的即插即用替代品,修复了 Playwright 本身的自动化表面所暴露的漏洞 — 使用相同的 API,
from patchright.sync_api import sync_playwright,采用 Apache-2.0 许可证。 - 两者开箱即用都将
navigator.webdriver报告为false— 在每个工具的实时验证中都有所体现 — 这是大多数机器人检测器首先读取的标志。 - 都不提供 IP 或解决挑战页面。 驱动级隐匿隐藏的是 自动化;它对 IP 声誉或流量验证墙没有任何帮助。Scrapeless Scraping Browser 在 195 个以上国家添加住宅代理和挑战处理到同一会话中。
- 免费开始。 新的 Scrapeless 账户包含免费的 Scraping Browser 运行时 — 可以在 app.scrapeless.com 注册。
介绍:两种隐匿方式,唯一不做的一件事
反机器人系统在两个主要领域捕捉自动化:浏览器(指纹表面如 WebGL 和字体)和驱动(控制浏览器的机械装置 — 来自 W3C WebDriver 规范、Chrome DevTools 协议 的制品,标准工具所暴露的自动化控制)。引擎级工具如经过修补的 Firefox 改造了前者。nodriver 和 Patchright 攻击后者:它们保持普通 Chromium,但剥离了普通自动化堆栈留下的标志。
这两个工具从不同的方向切入。 nodriver 完全抛弃 Selenium,使用异步 Python 通过 DevTools 协议驱动 Chrome。Patchright 完全保留 Playwright 的原样,并修复其底层的漏洞,因此现有的 Playwright 代码无需更改即可运行。本指南安装两个工具,分别运行同一任务,展示二者都无法解决的共同限制,并解释如何通过一个管理的 云浏览器 填补这一空白。
这些工具是什么 — 以及“驱动级”意味着什么
驱动级隐匿是关于浏览器如何 控制 的,而不是浏览器 是什么。标准的 Selenium 或 Playwright 会话通过控制通道的制品泄露其实质:navigator.webdriver 属性被设置为 true、CDP 运行时钩子、自动化扩展。检测器正是寻找这些信号。nodriver 和 Patchright 去除了这些信号,同时让你使用普通的 Chromium。
nodriver 是广泛使用的 undetected-chromedriver 的维护继任者。它是一个异步优先的 Python 框架,直接与 CDP 对话 — 不需要 chromedriver 可执行文件,没有 Selenium webdriver 层,因此根本就没有用于指纹识别的 webdriver 二进制文件。它自己的描述将其框定为一个快速的自动化和抓取框架,可以绕过 Cloudflare 和 hCaptcha 等系统,且其许可证为 AGPL-3.0。
Patchright 采取兼容性路线:它是 Playwright Python 包的无检测重实现,修补了 Playwright 自动化表面中的检测漏洞。你将它安装在 Playwright 替代位置,并只需更改一个导入;其他一切 — 选择器、上下文、evaluate — 都是你已经书写的 Playwright。它采用 Apache-2.0 许可证,比 nodriver 的版权更宽松,这在嵌入商业产品时可能很重要。
同时安装这两个工具
nodriver 从 PyPI 安装并带来自己的 Chrome 处理;Patchright 如同 Playwright 安装并下载一个 Chromium 版本:
bash
# nodriver — 异步 CDP 框架,undetected-chromedriver 的继任者
pip install nodriver
# Patchright — 即插即用的无检测 Playwright,以及它的 Chromium 版本
pip install patchright
patchright install chromium
nodriver:异步 CDP,无 webdriver 层
nodriver 的 API 是异步和 CDP 原生的。这会启动 Chrome,导航,并读取自动化标志:
python
import nodriver as uc
async def main():
browser = await uc.start(headless=True)
page = await browser.get("https://example.com")
await page.sleep(1)
print("标题:", await page.evaluate("document.title"))
print("WEBDRIVER:", await page.evaluate("navigator.webdriver"))
browser.stop()
nodriver自带循环助手,这样清理过程保持干净
uc.loop().run_until_complete(main())
这将打印 `TITLE: 示例域` 和 `WEBDRIVER: False`。没有 `chromedriver` 进程,也没有 Selenium 在栈中 — 控制通道是原始的 CDP,因此缺少 webdriver 信号,而不是简单地被覆写。使用 `uc.loop()` 而不是裸的 `asyncio.run` 使得 nodriver 自己的事件循环清理保持干净。
## Patchright: 相同的 Playwright,减去泄漏
如果你已经有了 Playwright 代码,Patchright 只需一行切换 — 导入发生变化,其他则无变化:
```python
# 唯一的更改来自 Playwright: 从 patchright 导入,而不是 playwright
from patchright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com")
print("TITLE:", page.title())
print("WEBDRIVER:", page.evaluate("navigator.webdriver"))
browser.close()
这也会打印 WEBDRIVER: False。由于 API 与 Playwright 相同,因此现有的 Playwright 爬虫通过更改导入来采用 Patchright 的隐形 — 无需重写,无需新的心理模型。
在免费计划上获取你的 API 密钥: app.scrapeless.com
选择哪个 — 以及两者留下的空白
在它们之间选择归结于你的起点。 如果你正在编写新的异步 Python,并希望无 Selenium 旧遗留的最轻量 CDP 直接路径,nodriver 适合你 — 在商业嵌入之前请注意其 AGPL-3.0 的 copyleft。 如果你有 Playwright 代码或一支精通 Playwright API 的团队,Patchright 为你提供相同的表面,泄漏得到了修补,且拥有宽松的 Apache-2.0 许可证。两者都让你使用普通的 Chromium;都不要求你学习新引擎。
它们共享的空白是重要的部分。 驱动级隐形隐藏了会话是自动化的。它不改变会话来源,也不回答挑战页面。有三种失败模式完全处于这些工具未能解决的问题之外:
- IP 声誉。 你的请求从你机器的 IP 发出。一个阻止数据中心范围或对你地址进行速度限制的目标会以与天真的一个一样快的速度阻止一个无 webdriver 的完美会话。
- 挑战页面。 一个流量验证的中间页仍然需要解决。看起来不自动化会降低出现频率;但并不清除已经出现的那些。
- 指纹深度。 这些工具专注于控制通道,而不是专门的反检测浏览器重写的完整引擎级指纹表面。
所有三者都是网络和基础设施问题,没有驱动级库能解决它们,因为它们不是驱动级问题。
Scrapeless Scraping Browser 的位置
当目标在 IP 声誉上设定了门槛或提供挑战 — 不仅仅是基于 webdriver 标志 — 缺失的部分是居民出口和挑战处理。Scrapeless Scraping Browser 在一个管理会话中提供了两者:一个由自开发的 Chromium 提供支持的反检测云浏览器,具有在 195 多个国家中根据会话选择的住宅代理,并暴露为 CDP 端点。因为 Patchright 就是 Playwright,连接到它的方式与 Playwright 已经使用的 connect_over_cdp 调用相同:
python
import os
from playwright.sync_api import sync_playwright
# 云 Chromium 具有住宅出口 — IP + 挑战层级
API_KEY = os.environ["SCRAPELESS_API_KEY"]
ws_endpoint = (
"wss://browser.scrapeless.com/api/v2/browser"
f"?token={API_KEY}&session_ttl=180&proxy_country=US"
)
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(ws_endpoint)
page = browser.contexts[0].new_page() if browser.contexts else browser.new_page()
page.goto("https://example.com", wait_until="domcontentloaded")
print("TITLE:", page.title())
browser.close()
实际的模式是分层的:对于仅检查驱动的目标使用 nodriver 或 Patchright 进行自托管运行,而对于也考虑 IP 和发布挑战的目标则使用 Scrapeless 会话。Scrapeless 文档 有完整的参数参考,而 定价 是基于使用的,并且提供免费的层级。特别是对于挑战页面部分,关于 用 Python 解决 Cloudflare 的教程 显示了管理会话清除了驱动程序仅堆栈无法做到的事情。
结论:隐藏驱动,然后解决网络
nodriver 和 Patchright 是应对自动化检测的两个最强大的驱动级解决方案——nodriver 通过舍弃 Selenium 直接使用 CDP,Patchright 则通过在原地修补 Playwright 实现——两者都能清除每个检测器首先检查的 webdriver 标志。根据你的代码库和许可证需求进行选择,并明确边界:它们隐藏的是自动化,而不是基础设施。
对于那些还评估 IP 声誉并抛出挑战的目标,请保持 Scrapeless Scraping Browser 会话在轮换中。在这里,一切都与 CDP 或 Playwright 相关,因此将请求从自托管的隐蔽运行路由到管理的云会话只需更改连接字符串,而无需重写。
准备好构建您的 AI 驱动数据管道了吗?
加入我们的社区,申请免费计划,与正在构建未被检测的自动化管道的开发者联系:Discord · Telegram。
在 app.scrapeless.com 注册以获取免费的 Scraping Browser 运行时,并在 nodriver 或 Patchright 处理仅限驱动的目标时,通过它来路由您的 IP 和挑战目标。
常见问题
问:nodriver 和 Patchright 有什么区别?
nodriver 是一个异步框架,直接通过 CDP 驱动 Chrome,不使用 Selenium 或 chromedriver,是 undetected-chromedriver 的继任者。Patchright 是 Playwright Python 包的即时替换,对 Playwright 的检测漏洞进行修补,同时保持完全的 Playwright API。选择 nodriver 以获取新的 CDP 原生栈,选择 Patchright 为现有的 Playwright 代码添加隐蔽性。
问:nodriver 和 Patchright 是否隐藏 navigator.webdriver?
是的——两者默认报告 navigator.webdriver 为 false,在此指南中进行了实时验证。nodriver 通过根本不使用 webdriver 层来去除 webdriver 信号;Patchright 则在 Playwright 的表面中进行修补。
问:这些反检测浏览器像 Camoufox 吗?
不。Camoufox 是一个引擎级反检测浏览器,它在 Firefox 内部重写指纹表面。nodriver 和 Patchright 是驱动级:它们运行普通的 Chromium 并隐藏自动化控制通道。这两种方法针对不同的检测层,可以互为补充。
问:我在商业使用它们之前应该检查哪个许可证?
nodriver 是 AGPL-3.0(强制性,具有网络使用义务);Patchright 是 Apache-2.0(宽松)。如果许可证条款限制了您的产品,Patchright 是其中更宽松的选择——但请根据您自己的要求审查两者。
问:如果我的会话已经看起来不像自动化,为什么还要添加 Scrapeless?
因为看起来不自动化只会对抗驱动级检查。硬目标还会考虑 IP 声誉并提供挑战页面,而没有任何驱动级库能够更改您的 IP 或解决挑战。Scrapeless Scraping Browser 将 195 多个国家的住宅代理和挑战处理捆绑在一个托管的 CDP 会话中,覆盖了这些工具无法处理的层。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



