オープンソースの playwright-stealth 代替
playwright-stealth は、Python の Playwright にステルス機能を加える最も手軽な方法です。ラッパーを 1 つかませるだけで、すべてのページに一連の JavaScript の検知対策が入ります。ただしその検知対策は素のブラウザに対する上書きで、メンテナー自身も概念実証(PoC)だと位置づけています。Clearcote はそれらの値をエンジン内でネイティブに設定するので、ページが見つけられる上書きがそもそもありません。
playwright-stealth とは?
playwright-stealth は、puppeteer-extra-plugin-stealth を Playwright 向けに Python へ移植したものです。AtuboDad による元の移植版は 2024 年半ばから更新されておらず、現在 PyPI のパッケージ名は活発にメンテナンスされているフォーク(Mattwmaster58)が引き継いでいます。このフォークは API を整理した 2.0 をリリースし、滞っていたプルリクエストもマージしました。MIT ライセンスで非常に広く使われており、PyPI の月間ダウンロード数は約 2.4M です。
仕組みとしては、すべてのコンテキストに初期化スクリプトを登録し、それぞれが 1 つずつ痕跡をパッチします。navigator.webdriver、navigator.languages、プラグイン、WebGL ベンダー、chrome.runtime などです。メンテナーは限界について率直で、README には、最も単純なボット検知以外は回避できると期待しないようにと書かれており、出発点という位置づけです。理由は構造的なものです。JavaScript による上書きは Function.prototype.toString やプロパティディスクリプタのチェックで見破られますし、ページの初期化スクリプトは Web Worker には届きません。さらに、Playwright ドライバー自身の CDP の副作用やネットワーク層には、パッケージのどこも手を付けていません。
Clearcote vs playwright-stealth
| 機能 | Clearcote | playwright-stealth |
|---|---|---|
| アプローチ | エンジンレベルの C++ パッチ:ネイティブな値 | 素のブラウザ上の JavaScript 初期化スクリプト |
| 検知されうる継ぎ目 | なし:ページ、iframe、ワーカーのすべてでネイティブ | toString、ディスクリプタ、ワーカーでの再読み取りで上書きが露見 |
| フィンガープリントのアイデンティティ | 1 つのシードから生成する整合性のあるペルソナ(Canvas、WebGL、フォント、navigator) | ホストの実際の値の上に、手作業で設定した少数の値 |
| ドライバー / CDP の副作用 | 起動時(isolated world)とエンジン内で抑制 | 未対応、素の Playwright ドライバー |
| TLS / ネットワークの整合性 | ClientHello が名乗る Chrome バージョンに従う | 未対応 |
| フレームワーク | Playwright と Puppeteer(Python、Node、.NET) | Playwright(Python) |
| 導入方法 | ブラウザのバイナリを差し替える | 1 行で Playwright をラップ |
| 料金 | オープンビルドは無料、最新ビルドは GitHub で無料、Pro は月額 $49 | 無料・オープン(MIT) |
比較は 2026年9月 時点のものです。playwright-stealth のライセンス:オープンソース(MIT)。内容は変わることがあるため、最新情報は各プロジェクトでご確認ください。
Clearcote が選ばれる理由
上書きではなく、ネイティブ
playwright-stealth の検知対策は、どれも本物のブラウザ関数を JavaScript の関数に置き換えるもので、その置き換えは外から観測できます。Clearcote は Chromium の内部で値を変えるので、ページが調べる関数は本物のネイティブ関数のままです。
どのレルムでも同じ値
初期化スクリプトがパッチするのはページです。同じ値を Web Worker や新しい iframe から読み直すと、パッチされていない元の値が返ります。エンジンレベルの値なら、どこで読んでも一致します。
いくつかの項目ではなく、アイデンティティ全体
--fingerprint のシード 1 つから、Canvas、WebGL、オーディオ、フォント、画面、ハードウェアにわたって一貫したマシンが生成されます。実ホストの上にいくつかの上書きを重ねるのとは違います。
Playwright のコードはそのまま
Clearcote は Chromium のバイナリです。executable_path にそのパスを指定するか SDK の launch() を使えば、Playwright スクリプトの残りはそのままで動きます。
playwright-stealth のほうが向いている場合
- 判定の緩い対象サイトで 5 分ほどで何か試したく、ブラウザのバイナリを管理したくない場合。
- 対象サイトが
navigator.webdriverのようなわかりやすい痕跡しかチェックしない場合。 - すでに Clearcote を使っていて、playwright-stealth がまだ必要か知りたい場合。答えは「不要」です。その検知対策はエンジンがすでに設定している値と重複しており、上から JavaScript の上書きを重ねると、エンジンが取り除いた継ぎ目が戻ってきてしまいます。
よくある質問
playwright-stealth は今でも使えますか?
今もインストールして動かせますし、メンテナンスされているフォーク(2.x)は更新が続いています。十分かどうかは対象サイト次第です。README 自身が、対応できるのは最も単純な検知だけだと注意しています。JavaScript による上書きは検知されうるうえ、ドライバー層とネットワーク層には手を付けていないためです。
playwright-stealth と Clearcote の違いは何ですか?
playwright-stealth は素の Chromium に JavaScript を注入して、一連の値を上書きします。Clearcote は、それらの値がネイティブで、フレームやワーカーをまたいでも一貫し、その下の TLS フィンガープリントも一致する改造 Chromium です。どちらも普通の Playwright で操作します。
playwright-stealth と Clearcote は併用すべきですか?
いいえ。エンジンがすでに整合性のある値を返しており、その上に JavaScript の上書きを重ねると、ネイティブ関数が検知されうる関数に置き換わってしまいます。Clearcote は素の Playwright で起動してください。
Node.js 版の playwright-stealth はありますか?
Node で同等のものは、playwright-extra と puppeteer-extra の stealth プラグインの組み合わせで、同じく JavaScript で上書きする設計です。Clearcote は Python・Node・.NET のどれからでも同じように使えます。
関連記事
オープンソースの Chromium 代替を試す
無料のオープンソース。Playwright & Puppeteer にそのまま組み込め、TLS ハンドシェイクまで整合性を保ちます。
GitHub があればブラウザ 1 つまで無料。カード登録は不要です。