オープンソースの puppeteer-extra-plugin-stealth 代替
stealth プラグインは、Puppeteer に検知対策を後付けする方法として今も最も多くインストールされており、週に約 840,000 ダウンロードありますが、2023 年 3 月以降リリースがありません。検知対策はどれも素の Chrome に当てる JavaScript のパッチで、JavaScript のパッチは自らの存在を露呈します。Clearcote はそれらの値をエンジン内でネイティブに設定します。
puppeteer-extra-plugin-stealth とは?
puppeteer-extra-plugin-stealth(berstend 作)は、ページのスクリプトが走る前に page.evaluateOnNewDocument で注入される、JavaScript の検知対策モジュールの集まりです。各モジュールが痕跡を 1 つずつパッチします。navigator.webdriver、プラグイン、chrome.runtime、WebGL ベンダー、iframe、コーデックなどです。MIT ライセンスで、npm で週約 840,000 ダウンロードと非常に人気があり、そのアプローチは playwright-stealth や selenium-stealth にも移植されました。
また、実質的にメンテナンスされていません。npm の最終リリース(2.11.2)は 2023 年 3 月で、リポジトリも 2024 年半ばから変更がありません。構造的な限界はそれ以前からのものです。これらは素のエンジンに対する JavaScript の上書きであり、上書きは Function.prototype.toString、書き換えられたプロパティディスクリプタ、そしてパッチが存在しない Web Worker やクロスオリジン iframe からの再読み取りによって露見します。ネイティブの値は変えず、TLS や HTTP/2 には手を付けず、CDP の Runtime.enable リークにも対処していません。README 自身も、ヘッドレス Chromium を検知するあらゆる方法を防ぐのはおそらく不可能だと認めています。
Clearcote vs puppeteer-extra-plugin-stealth
| 機能 | Clearcote | puppeteer-extra-plugin-stealth |
|---|---|---|
| アプローチ | エンジンレベルの C++ パッチ:ネイティブな値 | ドキュメントごとに注入する JavaScript の検知対策 |
| 検知されうる継ぎ目 | なし:すべてのレルム(ページ、ワーカー、iframe)でネイティブ | toString、ディスクリプタ、ワーカーや iframe での再読み取りで露見 |
| TLS / ネットワークの整合性 | 名乗る Chrome に一致(JA3/JA4 + HTTP/2) | 未対応 |
| フレームワーク | Playwright と Puppeteer(Python、Node、.NET) | Puppeteer(Node)、Playwright では playwright-extra |
| メンテナンス状況 | 活発 | 最終リリースは 2023 年 3 月 |
| ライセンス | オープンビルドは BSD-3 | MIT |
| 料金 | オープンビルドは無料、最新ビルドは GitHub で無料 | 無料・オープン |
比較は 2026年9月 時点のものです。puppeteer-extra-plugin-stealth のライセンス:オープンソース(MIT)。内容は変わることがあるため、最新情報は各プロジェクトでご確認ください。
Clearcote が選ばれる理由
上書きではなく、ネイティブ
stealth プラグインの検知対策は、どれも検知側に見破られうる JavaScript の上書きです。Clearcote は値をエンジン内で設定するので、ネイティブの値として読み取られ、見つけられる上書きもありません。
レルムをまたいで整合
ページに当てた JavaScript のパッチは、Web Worker やクロスオリジンの iframe では食い違います。エンジンレベルの値はどこでも一致するので、この種の痕跡をふさげます。
ネットワーク層
プラグインは TLS や HTTP/2 に手を出せません。Clearcote のハンドシェイクは名乗っている Chrome のバージョンに従うので、通信内容と JavaScript が一致します。
メンテナンスと検証を継続
Clearcote はリリースごとに公開テストで確認しています。プラグインの検知対策は 2023 年初頭のもので、その後 Chrome は何十ものバージョンを重ねています。
puppeteer-extra-plugin-stealth のほうが向いている場合
- すでに Puppeteer を使っていて、判定の緩い対象サイト向けに 1 行で導入できる検知対策バンドルが欲しい場合。
- 既存の Node スクレイパーにそのまま組み込める、MIT ライセンスのものが必要な場合。
- 公開テストページや古い検知に対しては手軽で、それで足りることもあります。
よくある質問
puppeteer-extra-plugin-stealth は今もメンテナンスされていますか?
活発にはメンテナンスされていません。npm の最終リリース 2.11.2 は 2023 年 3 月の公開で、リポジトリも 2024 年 7 月から更新がありません。今もインストールでき、広く使われていますが、検知対策は Chrome の変化に追いついていません。
JavaScript のステルスパッチが検知されるのはなぜですか?
本物の関数を上書きしているからです。検知側は関数を文字列化したり(ネイティブ関数なら [native code] と表示され、上書きした関数は自身のソースが見えます)、プロパティディスクリプタを調べたり、パッチが適用されていない新しい iframe や Web Worker から値を読み直したりできます。エンジンレベルの変更なら、どこでも値がネイティブになるので、この問題は起きません。
Clearcote は stealth プラグインとどう違うのですか?
プラグインは素の Chrome に JavaScript の検知対策を注入します。Clearcote は改造 Chromium で、値はエンジン内でネイティブ、ワーカーや iframe をまたいでも整合し、さらにプラグインでは手の届かない TLS/HTTP-2 のペルソナも備えています。
Playwright 版はありますか?
はい。Node では playwright-extra で同じプラグインを読み込めますし、playwright-stealth はそれを Python に移植したものです。どちらも同じく JavaScript で上書きする設計です。
関連記事
オープンソースの Chromium 代替を試す
無料のオープンソース。Playwright & Puppeteer にそのまま組み込め、TLS ハンドシェイクまで整合性を保ちます。
GitHub があればブラウザ 1 つまで無料。カード登録は不要です。