今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

apify/fingerprint-suite

PlaywrightとPuppeteerの自動化にブラウザフィンガープリント生成・注入機能を追加するTypeScriptツールキット

header-generator、fingerprint-generator、fingerprint-injectorを組み合わせるだけで、Playwright上のブラウザが単純なランダム値の寄せ集めではなく、Bayesian生成ネットワークによる統計的に矛盾のない指紋をまとうようになります。今まで書いていたテストが、ボット防止技術に何度も弾かれていたなら、同じスクリプトのままブラウザを起動して結果が変わる瞬間を体験できるはずです。テストコードとビルドスクリプトが揃ったモジュール構成なので、手元のスクレイピングや自動化テストにそのまま組み込んで今日から試せます。

01 / 概要
何をするものか一文で言うと
ひとことでPlaywrightとPuppeteerの自動化にブラウザフィンガープリント生成・注入機能を追加するTypeScriptツールキット

apify/fingerprint-suiteは、ブラウザのフィンガープリントとHTTPヘッダーを現実的に生成し、PlaywrightやPuppeteerのブラウザインスタンスに注入するためのツール群です。header-generator・fingerprint-generator・fingerprint-injector・generative-bayesian-networkの4パッケージがモノレポ構成で提供されています。目的はスクレイパーの検知回避、いわゆる「アンチボット対策のかいくぐり」です。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

中核はgenerative-bayesian-networkです。実データから学習したベイジアンネットワークをzip形式のnetwork.jsonとして同梱し、そこから確率的に一貫性のあるnavigator・screen・fonts・videoCardなどの値を生成します。header-generatorはこのネットワークを使ってUser-Agentや言語などに整合したHTTPヘッダー一式を作ります。fingerprint-generatorはheader-generatorを継承し、ヘッダーとブラウザAPI用のFingerprintオブジェクトをまとめて返します。最後にfingerprint-injectorがnewInjectedContext関数やnewInjectedPage関数を通じて、生成済みフィンガープリントをPlaywrightのBrowserContextやPuppeteerのPageに注入します。utils.jsによりnavigator・screen・WebGLなどのJS APIを書き換える評価スクリプトが実行される仕組みです。fingerprintOptionsのdevicesやoperatingSystemsで生成条件を絞れます。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    READMEのクイックスタート通りにnewInjectedContextへfingerprintOptionsとnewContextOptionsを渡すと、headless: falseで起動したChromiumに実在ブラウザらしいnavigator値やscreen値が反映された状態を確認できます。

  2. STEP 02

    pnpm installとturboによるビルド後、test/antibot-services/antibot.jsを実行すると、BotDやCreepJSといった実在の検知サービスに対するスコアを文字コードとして取得できます。

  3. STEP 03

    fingerprintOptionsのdevicesを mobile、operatingSystemsを ios に指定すると、生成されるuserAgentDataやplatformがモバイルiOS相当の値に一貫して変わる様子が見えます。

  4. STEP 04

    screenオプションでminWidthやmaxWidthを指定すると、README内の注記通り1件あたりの生成時間が約0.0007秒から約0.03秒へ伸びることを体感できます。

  5. STEP 05

    slim: trueを試すと、一部の重い評価回避処理が省略され、CreepJSなどの採点は下がる可能性がある代わりに実行速度が改善する挙動を確認できます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

実行すると、Playwrightのbrowser.newContext相当の注入済みコンテキストと、それに紐づく整合性のあるHTTPヘッダー一式が手に入ります。navigator・screen・fonts・videoCard・audioCodecsなどが単一ブラウザプロファイルとして矛盾なく揃うため、素のPlaywright/Puppeteerより検知サービスでのスコアが改善しやすくなります。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

フィンガープリント生成の核となるnetwork.jsonはzipバイナリで、中身の学習データやモデル精度をソースレビューだけでは検証できません。

02

test/antibot-services配下のスクリプトはBotDやCreepJSなど外部の実在サービスへ実際にアクセスする内容なので、結果はネットワーク状況やサービス側の仕様変更に左右されます。

03

playwrightとpuppeteerはpeerDependenciesとして任意指定されているため、利用側で別途インストールしないと動作しません。

04

screenオプションの利用で生成速度が数十倍遅くなる点はREADME・コード双方に明記されており、大量生成用途では注意が必要です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

Playwright・Puppeteerでスクレイパーを運用していて、単純なUser-Agent偽装では検知を避けきれず悩んでいる開発者に向いています。header-generator・fingerprint-generator・fingerprint-injectorの各パッケージが独立していながらnewInjectedContext一つで組み合わせられる構成なので、既存コードへの導入コストは低めです。ソースとREADMEの記述が一致しており、生成ロジックやテスト構成も実在するため、この判断はインストールしなくても十分信頼できます。ただしモデルの中身であるzipデータの精度自体は、実際に生成・注入して検知サービスで試すまで確定的には言えません。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する