puppeteer-extra-plugin-stealth は Puppeteer 用のアンチディテクトパッケージとして最も広く使われています。npm では週間 600K 以上のダウンロード数を記録しています。しかし、最後のアップデートは 2023年3月で止まったままです。最新バージョンは v2.11.2。メンテナンスは事実上停止しており、GitHub の Issue は増える一方で、アンチボットシステムはすでに先に進んでいます。
要約: ステルスプラグインはページレベルの JavaScript オーバーライドで検出シグナルをパッチします。2026年現在、Cloudflare・Akamai・DataDome などのアンチボットシステムは JavaScript が届かないシグナルをチェックしています。TLS フィンガープリント、CDP プロトコルのアーティファクト、エンジンレベルのレンダリング差異です。必要なのはより良いプラグインではありません。別のレイヤーでの対策です。プロトコルリークを隠すパッチドドライバか、フィンガープリントをエンジンレベルで処理するパッチドブラウザです。
ステルスプラグインが実際にやっていること
puppeteer-extra-plugin-stealth は evaluateOnNewDocument 経由で実行される 11 個の回避モジュールをバンドルしています。各モジュールは 1 つの検出サーフェスをパッチします。
| Module | パッチ対象 |
|---|---|
webdriver |
navigator.webdriver = true を除去 |
chrome.runtime |
chrome.runtime オブジェクトを偽装 |
chrome.csi / chrome.app |
不足している Chrome API スタブを追加 |
navigator.plugins |
プラグイン配列をスプーフィング |
navigator.languages |
言語設定をオーバーライド |
navigator.permissions |
パーミッションクエリの動作を修正 |
media.codecs |
コーデックサポートをスプーフィング |
sourceurl |
インジェクトされたスクリプトから //# sourceURL を隠蔽 |
iframe.contentWindow |
クロスオリジン iframe の検出を修正 |
webgl.vendor |
WebGL のベンダー/レンダラー文字列をスプーフィング |
user-agent-override |
リアルな User-Agent ヘッダーを設定 |
これらのパッチは、アンチボットシステムが主にページレベルの JavaScript プロパティをチェックしていた 2021〜2022年には有効でした。しかし、現代の検出システムが実際にチェックしているものには対応できません。
2026年にステルスプラグインが通用しない理由
アンチボット検出は JavaScript レイヤーの下に移行しました。現在重要なシグナルは evaluateOnNewDocument では届かないものです。
CDP プロトコルリーク
Puppeteer が Chrome に接続すると、Runtime.enable、Page.enable、Network.enable などの CDP コマンドを送信します。これらのコマンドはブラウザの内部状態にアーティファクトを残し、アンチボットスクリプトはそれを検出できます。ステルスプラグインはページレベルで動作するため、プロトコルレベルの CDP には手を出せません。
Runtime.enable コマンドだけで、自動化セッションをフィンガープリントするのに十分です。ページレベルでいくらパッチしても、CDP コマンドが発行された事実を隠すことはできません。
TLS フィンガープリンティング
Cloudflare は HTML を配信する前に TLS フィンガープリント(JA3/JA4)をチェックします。TLS フィンガープリントが不正な場合、ステルスプラグインの JavaScript パッチが読み込まれる前にセッションがチャレンジまたはブロックされます。プラグインはページレベルで動作するため、TLS レイヤーにアクセスする手段がありません。TLS フィンガープリンティングが検出スタックでどのように機能するかの詳細は、ブラウザ自動化をブロックされずに行う方法のネットワークレイヤーセクションをご覧ください。
JavaScript オーバーライドの検出
アンチボットスクリプトは navigator.webdriver の値だけをチェックするわけではありません。プロパティディスクリプタもチェックします。実際のブラウザでは webdriver は Navigator プロトタイプ上のネイティブ getter として定義されています。ステルスプラグインは Object.defineProperty でオーバーライドするため、ディスクリプタの configurable フラグと getter 関数の toString() 出力が変わります。検出スクリプトはこの不一致をテストします。
同じことが他のオーバーライドにも当てはまります。chrome.runtime、プラグイン配列、パーミッションクエリはすべて、ネイティブ実装が JavaScript スタブに置き換えられた場合に検出可能な差異を持ちます。
ヘッドレスレンダリングの差異
--headless=new(新しいヘッドレスモード)を使っても、Chrome はヘッドありの Chrome とは微妙に異なるレンダリングをします。フォントメトリクス、GPU アクセラレーションされた Canvas 出力、スクリーンサイズの API はすべて異なります。ステルスプラグインは一部の navigator プロパティをパッチしますが、レンダリングエンジン自体の動作を変えることはできません。
ステルスプラグインに代わるもの
エコシステムは 2 つのアプローチに分かれています。パッチドドライバ(プロトコルレイヤーを修正)とパッチドブラウザ(エンジンレイヤーを修正)です。それぞれ異なる問題を解決します。
パッチドドライバ:Rebrowser と Patchright
Rebrowser は Puppeteer と Playwright のドロップインリプレースメントを提供します(rebrowser-puppeteer、rebrowser-playwright)。パッチは CDP プロトコルのアーティファクトを対象としており、Runtime.enable やその他のコマンドがブラウザと通信する方法を変更して、検出可能な痕跡を残さないようにします。コード内のパッケージ名を入れ替えるだけで、他はすべてそのままです。
// Before: detected
const puppeteer = require('puppeteer');
// After: CDP artifacts patched
const puppeteer = require('rebrowser-puppeteer');Patchright は Playwright 向けに同様のことを行い、Python に重点を置いています。Runtime.enable リークをパッチし、活発にメンテナンスされています。
制限事項: パッチドドライバはプロトコル検出を修正しますが、ブラウザフィンガープリンティングには対処しません。サイトが Canvas、WebGL、AudioContext、フォントレンダリングをチェックする場合、依然として検出されるリスクがあります。パッチドドライバは「自動化されているか?」という問いには対応しますが、「実際のデバイスか?」という問いには対応しません。
パッチドブラウザ:アンチディテクトエンジン
パッチドブラウザは Chromium 自体を改造し、フィンガープリントシグナルがエンジンレベルで一貫性を持つようにします。Canvas 出力、WebGL レンダリング、AudioContext データ、フォントメトリクス、画面サイズ、タイムゾーン、ロケールがすべて、単一の実デバイスプロファイルに一致する値を返します。
これが Clawbrowser の仕組みです。20 以上のサーフェスにわたるエンジンレベルのフィンガープリントパッチ、ビルトインのプロキシルーティング、WebRTC リーク防止、ネイティブ CDP サポートを備えた Chromium フォークです。既存の Puppeteer または Playwright コードが CDP 経由で接続できます。
from playwright.async_api import async_playwright
async def automate_without_detection():
async with async_playwright() as p:
# Connect to Clawbrowser instead of stock Chromeステルスプラグインでは対応できないことを Clawbrowser が処理する項目:
- エンジンレベルの Canvas/WebGL/AudioContext の一貫性(JavaScript スタブではない)
- 実際の Chrome セッションに一致する TLS フィンガープリント
Runtime.enableアーティファクトのない CDP 接続- ブラウザレベルの WebRTC リーク防止
- 地理的整合性を備えたビルトインプロキシルーティング
フィンガープリントされる対象の詳細な解説は、ブラウザフィンガープリント解説:アンチボットが使う 20 以上のシグナルをご覧ください。
選び方
適切なツールは何に検出されているかによって変わります。
| 検出タイプ | 症状 | 解決策 |
|---|---|---|
| CDP プロトコルアーティファクト | ページ読み込み直後にブロック、CAPTCHA なし | パッチドドライバ(Rebrowser, Patchright) |
| ブラウザフィンガープリントの不一致 | 全ページで CAPTCHA、またはサイレントなデータ差異 | パッチドブラウザ(Clawbrowser) |
| TLS フィンガープリントの不一致 | ページ読み込み前にブロック(最初のリクエストで 403) | プロキシルーティング付きパッチドブラウザ |
| IP レピュテーション | データセンター IP からブロック | レジデンシャルプロキシ(どのアプローチでも) |
| 行動検出 | 5〜10 ページ後にブロック | コード内のタイミングとセッション管理 |
パッチドドライバで十分な場合
CDP アーティファクトをチェックするがブラウザのフィンガープリントを深く検査しない、基本的な検出を持つサイトを自動化する場合、Rebrowser または Patchright で十分です。軽めのアンチボット設定のサイトの多くがこれに該当します。
パッチドブラウザが必要な場合
サイトが Cloudflare Bot Management、Akamai Bot Manager、DataDome、PerimeterX を使用している場合、エンジンレベルのフィンガープリント一貫性が必要です。検出が 20 以上のブラウザサーフェスを同時にチェックする場合、ページレベルのパッチやドライバレベルのパッチでは不十分です。
Clawbrowser はローカルで動作する無料の Chromium ベースアンチディテクトブラウザです。管理されたフィンガープリント、プロキシルーティング、ネイティブ CDP、ビルトイン MCP サーバーを備えています。ブラウザのアイデンティティとネットワークレイヤーを処理するため、コードは行動とセッション管理だけに集中できます。
ステルスプラグインからの移行
現在 puppeteer-extra-plugin-stealth または playwright-stealth を使用している場合、Clawbrowser への移行は 5 分以内で完了します。
Before(ステルスプラグイン)
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({ headless: false });After(Clawbrowser)
const puppeteer = require('puppeteer-core');
// Connect to Clawbrowser over CDP
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222'違いの核心は、puppeteer-extra と puppeteer-extra-plugin-stealth を依存関係から完全に削除することです。プラグインの設定も不要です。回避モジュールの選択も不要です。アンチディテクションはコード内ではなくブラウザレベルで行われます。
スクレイピング固有のパターン(ページネーション、セッションウォーミング、Cloudflare バイパス)については、検出されずに Web スクレイピングする方法をご覧ください。
FAQ
puppeteer-extra-stealth は完全に無意味ですか?
商用のアンチボットシステムを導入していないサイトでは依然として機能します。対象サイトが navigator.webdriver と基本的な JavaScript プロパティのみをチェックしている場合、ステルスプラグインで十分です。ただし、Cloudflare、Akamai、DataDome、PerimeterX を使用しているサイトや、Facebook、Instagram、LinkedIn、X などのソーシャルメディアプラットフォームでは検出されます。
playwright-stealth にも同じ問題がありますか?
あります。playwright-stealth も同じアプローチを採用しています。ページレベルインジェクションによる JavaScript オーバーライドです。TLS フィンガープリント、CDP アーティファクト、エンジンレベルのレンダリングには手が届きません。検出に対する制限は同一です。
Rebrowser と Clawbrowser を併用できますか?
その必要はありません。Clawbrowser はプロトコルレイヤーとフィンガープリントレイヤーの両方を処理します。Rebrowser のパッチは、ストックの Chrome を使用しておりアンチディテクトブラウザに切り替えられない場合に有用です。Clawbrowser を使用している場合、CDP アーティファクトはすでに処理されています。
stealth がまだ週間 600K ダウンロードされるのはなぜですか?
慣性です。多くのチュートリアルや Stack Overflow の回答が今でもこのパッケージを推奨しています。開発者はパッケージがまだメンテナンスされているか確認せずに、2022年に有効だったソリューションをコピー&ペーストしています。高いダウンロード数は、現代の検出に対して有効であることを意味しません。
パッチを当てるのをやめて、根本から解決しよう
ステルスプラグインは、アンチボット検出が JavaScript レベルのチェックに依存していた時代には合理的なソリューションでした。検出は TLS フィンガープリント、CDP プロトコル分析、エンジンレベルのレンダリング差異へと移行しました。ページレベルのパッチではこれらのシグナルに到達できません。
Clawbrowser をインストールして、ブラウザレベルで検出に対処しましょう。clawbrowser.ai からインストールプロンプトをコピーして AI エージェントに貼り付けてください。puppeteer-extra と puppeteer-extra-plugin-stealth を依存関係から削除してください。既存の Puppeteer または Playwright コードを CDP 経由で接続してください。アンチディテクションはコード内ではなくブラウザの中にあります。
検出モデルの基礎については、ブラウザ自動化をブロックされずに行う方法:4層の防御スタックをご覧ください。
Continue exploring
Ask AI how Clawbrowser helps
続きを読む


