🎯 カスタマイズ可能で検出回避型のクラウドブラウザ。自社開発のChromiumを搭載し、ウェブクローラーAIエージェント向けに設計されています。👉今すぐ試す
ブログに戻ります

nodriver vs Patchright: Pythonによる検出されないブラウザ自動化

Ethan Brown
Ethan Brown

Advanced Bot Mitigation Engineer

10-Jul-2026

TL;DR:

  • nodriverとPatchrightはドライバーレベルの検出されない自動化ツールです — 自動化されているセッションを示す信号を隠すために、ObscuraやLightpandaのように新しいブラウザエンジンを使用するのではなく、従来のChromiumを維持しています。
  • nodriverはundetected-chromedriverの後継です:非同期Pythonフレームワークで、Chrome DevTools Protocolに直接通信し、Seleniumやchromedriverバイナリを使用しないため、従来のWebドライバーによる手がかりは設計上存在しません。AGPL-3.0ライセンスで、4,000を超えるGitHubスターを獲得しています。
  • PatchrightはPlaywright Pythonのドロップイン置き換えです。Playwright自身の自動化面が露出する脆弱性を修正し、同じAPIを保持します。from patchright.sync_api import sync_playwrightを使用し、Apache-2.0ライセンスです。
  • 両方とも初期設定でnavigator.webdriverfalseとして報告します — 以下でそれぞれのライブ検証を行います — これはほとんどのボット検出器が最初に読むフラグです。
  • どちらもIPを供給せず、チャレンジページを解決しません。 ドライバーレベルのステルスは自動化を隠しますが、IPの評判やトラフィック検証の壁には何も寄与しません。Scrapeless Scraping Browserは195か国以上で住宅プロキシとチャレンジ処理を同じセッションに追加します。
  • 無料で開始できます。 新しいScrapelessアカウントには無料Scraping Browserランタイムが含まれています — app.scrapeless.comでサインアップしてください。

はじめに:検出されない方法は二つあるが、両者にはやらないことがある

ボット対策システムは、自動化を大きく二つの場所でキャッチします:ブラウザ(WebGLやフォントなどのフィンガープリンティング面)とドライバー(ブラウザを制御する機構 — <a href="https://www.w3.org/TR/webdriver2/" rel="nofollow"><strong>W3C WebDriver仕様</strong></a><a href="https://chromedevtools.github.io/devtools-protocol/" rel="nofollow"><strong>Chrome DevTools Protocol</strong></a>のアーティファクト、自動化制御を標準ツールが公開するもの)。エンジンレベルのツール(パッチを当てたFirefoxなど)は前者を改変します。nodriverとPatchrightは後者に焦点を当て、通常のChromiumを維持しつつ、通常の自動化スタックが残す証拠を取り除きます。

彼らは対照的なアプローチを取ります。<a href="https://github.com/ultrafunkamsterdam/nodriver" rel="nofollow"><strong>nodriver</strong></a>はSeleniumを完全に排除し、非同期PythonからDevTools Protocolを介してChromeを制御します。Patchrightは<a href="https://playwright.dev/python/" rel="nofollow"><strong>Playwright</strong></a>をそのままに保ち、その下の脆弱性を修正するためにパッチを当てますので、既存のPlaywrightコードはそのまま実行できます。このガイドでは、両方をインストールし、同じタスクをそれぞれで実行し、どちらも解決しない共有の制限を示し、管理されたクラウドブラウザがそのギャップをどのように埋めるかを説明します。

これらのツールとは何か — および「ドライバーレベル」とは何を意味するか

ドライバーレベルのステルスは、ブラウザが制御される方法に関するものであり、ブラウザが何であるかではありません。標準のSeleniumやPlaywrightのセッションは、制御チャネルのアーティファクトを通じてその性質を漏らします:navigator.webdriverプロパティがtrueに設定され、CDPランタイムフックが存在し、自動化拡張機能があります。検出器はまさにこれを探します。nodriverとPatchrightはこれらを排除し、通常のChromiumの状態を維持します。

nodriverは、広く使用されているundetected-chromedriverのメンテナンスされた後継です。これは非同期優先のPythonフレームワークで、CDPに直接アクセスします — chromedriver実行可能ファイルなし、SeleniumのWebドライバー層なし、したがって最初からフィンガープリンティングされるWebドライバーのバイナリがありません。自らの説明では、CloudflareやhCaptchaのようなシステムを通過するための自動化およびスクレイピングのための高速なフレームワークとして位置付けられ、AGPL-3.0ライセンスです。

Patchrightは互換性のルートを取ります:Playwrightの自動化面の検出漏れを修正するためのundetected再実装です。Playwrightの代わりにインストールし、インポートを一つ変更するだけで、他のすべて — セレクタ、コンテキスト、evaluate — はあなたがすでに書いているPlaywrightそのものです。それはApache-2.0ライセンスで、あらゆる商用製品に埋め込む際にはnodriverのコピーレフトよりも許容的なライセンスです。

両方をインストール

nodriverはPyPIからインストールされ、自分のChromeハンドリングを持っており、PatchrightはPlaywrightのようにインストールし、Chromiumビルドをダウンロードします:

bash Copy
# nodriver — 非同期CDPフレームワーク、undetected-chromedriverの後継
pip install nodriver

# Patchright — ドロップインの検出されないPlaywright、およびそのChromiumビルド
pip install patchright
patchright install chromium

nodriver:非同期CDP、Webドライバー層なし

nodriverのAPIは非同期でCDPネイティブです。これによりChromeを起動し、ナビゲートし、自動化フラグを読み取ります:

python Copy
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("TITLE:", await page.evaluate("document.title"))
    print("WEBDRIVER:", await page.evaluate("navigator.webdriver"))

    browser.stop()

nodriverは自身のループヘルパーを提供するため、テardownはクリーンに保たれます

uc.loop().run_until_complete(main())

Copy
これにより`TITLE: Example Domain`と`WEBDRIVER: False`が印刷されます。`chromedriver`プロセスは存在せず、スタックにはSeleniumもありません — 制御チャネルは生のCDPであるため、webdriver信号は存在せず、パッチが当てられていません。`asyncio.run`の代わりに`uc.loop()`を使用することで、nodriver自身のイベントループのテardownがクリーンに保たれます。

## Patchright: 漏れのない同じPlaywright

すでにPlaywrightのコードを持っている場合、Patchrightはインポートを変更するだけのワンラインのスイッチです — 他に何も変わりません:

```python
# Playwrightとの唯一の変更: patchrightからインポートすること
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コピーレフトに留意してください。PlaywrightコードやPlaywright APIに精通したチームがいる場合、Patchrightは漏れを修正された同じ表面を提供し、許可的なApache-2.0ライセンスを持っています。両方とも通常のChromiumを使用し、新しいエンジンを学ぶ必要はありません。

両者が共有するギャップが重要です。 ドライバーレベルのステルスは、セッションが自動化されていることを隠します。それはセッションの出所を変えず、チャレンジページに対する応答を無くしません。3つの失敗モードは、これらのツールが対処する範囲外に完全に存在します:

  • IP評判。 あなたのリクエストはあなたのマシンのIPから発信されます。データセンター範囲をブロックしたり、あなたのアドレスをレート制限するターゲットは、無傷のwebdriverなしセッションをナイーブなものと同等の速さでブロックします。
  • チャレンジページ。 トラフィック検証のインタースティシャルは、まだ解決されなければなりません。自動化されていないように見えることで、出現頻度が下がりますが、それが出現するものを排除するわけではありません。
  • フィンガープリンティングの深さ。 これらのツールは制御チャネルに焦点を当てており、専用のアンチ検出ブラウザが書き換えるエンジンレベルのフィンガープリンティングの全範囲には触れません。

これらの3つはネットワークとインフラの問題であり、ドライバーレベルのライブラリはそれらを解決しません — なぜなら、それらはドライバーレベルの問題ではないからです。

Scrapeless Scraping Browserの適合性

ターゲットがIP評判でゲートを構築したり、チャレンジを出すと — webdriverフラグだけではなく — 欠けている部分は住宅の出口とチャレンジ処理です。Scrapeless Scraping Browserは、管理されたワンセッションで両方を提供します:自己開発のChromiumで動作するアンチデテクションのクラウドブラウザで、セッションごとに選択された195以上の国の住宅プロキシをCDPエンドポイントとして公開します。Patchright Playwrightなので、接続するのはPlaywrightがすでに使用しているconnect_over_cdpコールと同じです:

python Copy
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は、ドライバを確認するだけのターゲットに対し自己ホストされた実行を行い、住宅の出口とチャレンジ処理を考慮するターゲットに対してScrapelessセッションを使用します。Scrapelessのドキュメントには全パラメーターの参照があり、料金は使用量に基づいており、無料プランがあります。特にチャレンジページに関しては、PythonでCloudflareを解決するの walkthroughが、ドライバーだけのスタックでは解決できないものをクリアにする管理されたセッションを示します。

結論:ドライバーを隠してネットワークを解決する

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とチャレンジのターゲットを通過させましょう。

FAQ

Q: nodriverとPatchrightの違いは何ですか?
nodriverは、Seleniumやchromedriverを使用せずにCDP経由でChromeを直接制御する非同期フレームワークで、undetected-chromedriverの後継です。Patchrightは、Playwrightの検出リークを修正しつつ、正確なPlaywright APIを維持するPlaywright Pythonパッケージのドロップイン置換です。新しいCDPネイティブスタックにはnodriverを、既存のPlaywrightコードにステルスを追加するにはPatchrightを選択してください。

Q: nodriverとPatchrightはnavigator.webdriverを隠しますか?
はい — どちらもデフォルトでnavigator.webdriverfalseとして報告し、このガイドでライブで確認されています。nodriverはwebdriverレイヤーをまったく使用しないことでwebdriver信号を除去します。PatchrightはPlaywrightの表層からそれをパッチ削除します。

Q: これらはCamoufoxのようなアンチ検出ブラウザですか?
いいえ。CamoufoxはFirefox内のフィンガープリンターサーフェスを書き換えるエンジンレベルのアンチ検出ブラウザです。nodriverとPatchrightはドライバーレベルで、通常のChromiumを実行して自動化制御チャネルを隠します。この二つのアプローチは異なる検出層に対処し、相補的である可能性があります。

Q: 商業利用前にどのライセンスを確認すべきですか?
nodriverはAGPL-3.0(コピーレフト、ネットワーク利用義務あり);PatchrightはApache-2.0(許容的)です。ライセンス条件があなたの製品に制約を与える場合、Patchrightは二つの中でより許容的ですが、両方をご自身の要件に照らして確認してください。

Q: セッションがすでに自動化されていないように見えるのに、なぜScrapelessを追加するのですか?
自動化されていないように見えることは、ドライバーレベルのチェックを回避するだけです。ハードターゲットはIPの評判も考慮し、チャレンジページを提供しますが、どのドライバーレベルライブラリもIPを移動させたり、チャレンジを解決したりはしません。Scrapeless Scraping Browserは195か国以上で住宅プロキシとチャレンジ処理をまとめた管理されたCDPセッションに統合し、これらのツールがカバーしない層を網羅しています。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ