本文へスキップ
SDK · Python · Node · .NET

ステルスブラウザを、Playwright & Puppeteer に

Clearcote は Chromium なので、今ある自動化コードはそのまま動きます。起動の呼び出しを SDK の launch() に置き換えれば、Browser と同じように操作できる Playwright のハンドルが返ってきます(使い捨てプロファイル上で動くため、newContext() は同じコンテキストを返します)。その下で動くのは、アイデンティティの制御を JavaScript として注入するのではなく、エンジンにコンパイルしたビルドです。

オープンビルドはアカウント不要。最新ビルドも、GitHub アカウントがあれば同時に 1 ブラウザまで無料です。

起動の 1 行だけ変えて、あとはそのまま

# pip install clearcote
from clearcote import launch

browser = launch(fingerprint="account-42", light_stealth=True)
page = browser.new_page()
page.goto("https://example.com")
browser.close()

主なポイント

1 行で移行

launch() は使い捨てプロファイル上の Playwright ハンドルを返すので、セレクターやページオブジェクトはそのままで構いません。ただし、その newContext() は同じコンテキストを返すため、分離したコンテキストが必要な場合は ephemeralProfile: false を渡してください。Puppeteer は puppeteer.connect で serve() の CDP エンドポイントに接続します。

検証済みバイナリを自動で取得

初回使用時に、SDK は対応するビルドをダウンロードして SHA-256 を検証します。オープンビルドは SDK に組み込まれたハッシュと、ライセンスビルドはダウンロード時に返されるハッシュと照合します。オプトインの自動更新(オープンビルドのみ)では、最新リリースを公開済みのチェックサムと照合し、gpg がインストールされていればその GPG 署名も検証します。

名前付きオプションでアイデンティティを指定

fingerprint、platform、brand、timezone、acceptLanguage、proxy、geoip は、覚えておくべきスイッチではなく引数です。シード 1 つで、実行をまたいでアイデンティティが安定します。

整合性のあるデフォルト

ヘッドありで起動すると、エミュレートされたビューポートを使わないため、ページサイズが実際のウィンドウと一致します。WebRTC はマシンのアドレスを外に出さず、プロキシ使用時は QUIC がオフになるので、プロキシを迂回する UDP は発生しません。

フラグ 1 つで人間らしい入力

humanize: true を指定すると、クリック、タイピング、ドラッグ、スクロールが、曲線の軌跡をたどる trusted なネイティブ入力として送られます。navigator.webdriver は false のままです。

3 つの言語

Python(同期・非同期)、Node、.NET に対応し、PyPI、npm、NuGet で配布しています。.NET でも geoip が使え、人間らしい入力は HumanClickAsync のような明示的な呼び出しで提供します。保存済みプロファイル、レンダリング整合性チェック、Widevine、エージェント用ヘルパーは、現時点では Python と Node のみです。

SDK が代わりにやること

このパッケージは Clearcote のバイナリをラップし、アイデンティティのオプションを名前付き引数として扱えるようにします。ブラウザは決まった順序で解決されます(明示的なパス、CLEARCOTE_BINARY 環境変数、指定した version、ライセンスキーが見つかれば最新のライセンスビルド、最後に SDK に固定されたオープンビルド)。そのうえでバイナリを検証してキャッシュし、Playwright 経由で起動して、あなたのコードがすでに使っているオブジェクトを返します。

制御は C++ のエンジン内にあるため、読み込むべきステルスプラグインも、ページに注入されるものもありません。プラグインは JavaScript からプロパティをパッチしますが、パッチされた getter はネイティブのものと見分けがつきます。Clearcote では、メインフレームでも iframe でも worker でも、getter 自体がネイティブです。これがなぜ重要かは、検知の仕組みで説明しています。

標準の Chromium と異なる動作が 2 つあり、どちらも意図的なものです。1 つ目に、コンソールイベントとページエラーイベントは自動化クライアントに転送されません。それらの転送こそが、自動化を探るプローブの計測対象だからです。ページ内で収集し、page.evaluate() で読み戻してください。2 つ目に、ライセンスビルド(GitHub で無料)では、ユーザー名とパスワード付きの SOCKS5 プロキシを直接使えます。認証情報は username と password の個別のフィールドで渡します。標準の Chromium にない認証を、エンジンが実装しているためです。オープンビルドは SOCKS5 プロキシの認証を行えません。

ステルスプラグインとエンジンレベルのブラウザを比較

JavaScript のステルスプラグイン
Clearcote
変更が行われる場所
すべてのページとフレームに注入されるスクリプト
Chromium エンジンにコンパイル済み
ネイティブ関数のチェック
パッチされた getter を文字列化すると、そのソースコードが出てしまう
getter はネイティブコードなので、[native code] と返す
worker と iframe
realm ごとにパッチし直す必要があり、漏れが表に出る
ひとつのエンジンから、どこでも同じ値
TLS と HTTP/2
下で動くブラウザが送るものそのまま
エンジン自身の Chrome ハンドシェイク。ペルソナが報告するバージョンに一致
セットアップ
プラグインと、その evasions、それぞれのオプション
launch() の呼び出し 1 回

オープンソースのステルスプラグインは最初の一歩として妥当な選択で、多くのプロジェクトがそこから始めます。より詳しくは、puppeteer-extra-plugin-stealth との比較をご覧ください。

主な用途

スクレイピングとデータ収集

既存の Playwright や Puppeteer のクローラーはそのままに、その下で動くものだけを入れ替えます。

実際のページでの E2E テスト

自動化された標準の Chromium を通常のブラウザとは違う扱いをするサイトで、フローをテストします。

既存のテストスイートの移行

セレクターとページオブジェクトはそのままで、変わるのは起動の呼び出しだけです。テストごとに新しいコンテキストを開くフィクスチャでは ephemeralProfile: false が必要です。launch() の newContext() は、ひとつしかないプロファイルのコンテキストを返すためです。

フィンガープリンティング研究

同じスクリプトをペルソナありとなしで実行し、ページが計測する内容を比較します。

Clearcote は、プライバシー保護、テスト、研究、合法的な自動化のために作られています。どう使うか、そしてアクセスするサイトの規約を守ることは、利用者ご自身の責任です。

対象プラン

SDK は 3 つのプランすべてで使え、アイデンティティのオプションもほぼすべて同様です(ライセンスビルドが必要な一部のオプションには、フィンガープリントフラグの一覧で印が付いています)。キーがなければオープンビルドで動作します。ライセンスキー(GitHub アカウントがあれば無料)があれば最新ビルドで動作し、料金ページに記載したライセンスビルド限定の追加機能も使えます。

プランを比較

よくある質問

本当にそのまま置き換えられるのですか?

ほぼそのとおりです。Python(同期 API)と Node の launch() は、使い捨てプロファイル上で動く Browser 風のハンドルを返します。newPage() 以降はこれまでどおり動きますが、newContext() は同じコンテキストを返すため、分離したコンテキストが必要なコードでは ephemeralProfile: false を渡すか、コンテキストごとにブラウザを 1 つ起動してください。launchPersistentContext() は標準の BrowserContext を返します。Puppeteer は puppeteer.connect で serve() の CDP エンドポイントに接続し、.NET SDK は標準の Microsoft.Playwright オブジェクト(LaunchEphemeralProfileAsync からは IBrowserContext、LaunchAsync からは IBrowser)を返します。

puppeteer-extra-plugin-stealth や playwright-stealth はまだ必要ですか?

いいえ。むしろ追加しないほうが賢明です。こうしたプラグインは注入した JavaScript から値をパッチしますが、そのパッチ自体が気づかれる可能性があります。Clearcote はエンジン内で値を設定するので、プラグインがパッチすべきものは何も残っていません。

ヘッドレスでも動きますか?

はい。ただし、ヘッドレスモードにはそれ自体の痕跡があるため、実行できる環境ならヘッドありのほうが無難なデフォルトです。コンテナでは、公式の Docker イメージがデフォルトで仮想ディスプレイ上でヘッドありで動作します。

どの言語に対応していますか?

Python(同期・非同期 API)、Node.js、.NET です。3 つとも geoip のマッチングと人間らしい入力に対応しています(Python と Node では起動フラグ、.NET では HumanClickAsync のような明示的な呼び出し)。保存済みプロファイル、レンダリング整合性チェック、Widevine、ブラウザ内エージェントは、現時点では Python と Node のみです。

実行をまたいで同じアイデンティティを保つには?

同じ fingerprint シードを再利用し、Cookie とストレージが保持されるよう、ユーザーデータディレクトリを指定して launchPersistentContext を使います。シードを自分のアカウント ID やテナント ID から導出すれば、再現性を保てます。詳しくは永続的なアイデンティティをご覧ください。

ドキュメントで詳しく

関連する機能

Clearcote を試す

Playwright & Puppeteer にそのまま組み込め、TLS ハンドシェイクまで整合性を保ちます。まずはオープンソースのビルドから始められます。

GitHub があればブラウザ 1 つまで無料。カード登録は不要です。