本文へスキップ

プロファイルと永続化

実行をまたいで同じアイデンティティを保ちます。フィンガープリントのシードを使い回す、Cookie とストレージをプロファイルディレクトリに保存する、または実機の Chrome から取得した値を報告させる方法があります。

実機の Chrome のプロファイルをインポートする

シードから合成したペルソナの代わりに、実機から取得した値を Clearcote に返させることもできます。プロファイルは、取得元となる Chrome で tools/fingerprint-collect のコレクターで取得できます(collect.html を開いて「Capture」をクリックすると、JSON プロファイルがダウンロードされます)。また、同梱の convert_dataset.py コンバーターを使えば、オープンソースの chrome-fingerprints データセット(10k レコード)から作ることもできます。取得対象は navigator、画面のジオメトリ、WebGL のベンダー/レンダラーと getParameter の上限値、Web Audio、音声合成のボイス、フォント、コーデック、CSS @media の特性です。

プロファイルは、ファイルパス、オブジェクト、JSON 文字列のいずれかで SDK に渡します。gzip + base64 へのパッキングは SDK が行います。プロファイルに存在するフィールドは、ブラウザが本来返す値を上書きし、存在しないフィールドはブラウザのデフォルトにフォールバックします。Accept-Language を明示的に指定しなかった場合、SDK はプロファイルの navigator.languages からそれを導出します。インポートしたプロファイルはどちらのビルドでも読み込めます。ライセンスビルドでは 151 r19 以降で完全に適用されます。

プロファイルと一緒に fingerprint シードを渡さないでください。シードを渡すと farbling レイヤーが有効になり、厳格なスコアリングではそれが canvas の改ざんとみなされます。しかも、プロファイルがすでに提供している以上のものは何も得られません。どちらか一方だけを使ってください。プロファイルが置き換えるのは報告される値だけで、ピクセルを描画する仕組みは一切変わりません。そのため、1 台のマシン上で 2 つのアカウントがそれぞれ別のプロファイルを使っても、canvas はまったく同じになります。アカウントごとに描画結果を分ける必要がある場合は、プロファイルを使わず、アカウントごとのシードを使ってください。

from clearcote import launch

browser = launch(fingerprint_profile="profile.json", disable_gpu_fingerprint=True, fingerprint_noise=False)
page = browser.new_page()
page.goto("https://example.com")
browser.close()

プロファイルと永続化

同じ fingerprint シードを使い回せば、実行をまたいでアイデンティティを安定させられます。Cookie やストレージは、ユーザーデータディレクトリで永続化します。

from clearcote import launch_persistent_context

ctx = launch_persistent_context(r"C:\clearcote\profiles\acme", fingerprint="acme-tenant-7", headless=False)
page = ctx.pages[0] if ctx.pages else ctx.new_page()

プロファイルディレクトリの Cookie は、そのプロファイルを作成したマシンに紐づいたキーで暗号化されます。Cookie を保ったままプロファイルを別のマシンにコピーするには、portableProfile: true / portable_profile=True(キーがプロファイルと一緒に移動します)か、encryptionKey / encryption_key(キーは自分で決めたシークレットから導出され、機密情報はディスクに書き込まれません)を渡します。対象はライセンスビルドの Python と Node です。

SDK にはペルソナの保存機能もあります。Profile は、フィンガープリントのオプション、プロキシ設定、canvas ブリッジの設定、その他の起動オプションを、JSON として ~/.clearcote/profiles 以下に保存します(保存先は CLEARCOTE_PROFILE_DIR で変更できます)。

from clearcote import Profile, launch, launch_persistent_context

Profile("acct-1", {
    "fingerprint": "acct-1",
    "gpu_vendor": "Google Inc. (Intel)",
    "gpu_renderer": "ANGLE (Intel, Intel(R) UHD Graphics ... D3D11)",
    "canvas_bridge": {"url": "ws://127.0.0.1:8443", "auth": "user:secret"},
}).save()

ctx = launch_persistent_context(r"C:\clearcote\profiles\acct-1", profile="acct-1")
browser = launch(profile="acct-1", headless=False)
保存されたプロファイルは平文で、canvasBridge.auth などの認証情報を含むことがあります。プロファイルのファイルは信頼された入力として扱い、コミットしたり共有したりしないでください。