Camoufoxは、Webスクレイピングや AIエージェント向けに設計されたFirefoxベースのアンチ検知ブラウザです。JavaScriptによる後付けの偽装ではなく、Firefox本体のC++コードにパッチを当ててnavigator情報やWebGL、canvasなどのフィンガープリントを書き換えます。Playwrightから独自のJugglerプロトコル経由で操作できる点も特徴です。
ビルドはDockerfileとMakefile起点で進みます。まずFirefoxソースを取得し、additions/以下のパッチをmozilla-centralに適用します。additions/camoucfg/MaskConfig.hppが、navigator.webdriverや画面情報などフィンガープリント偽装ロジックをC++レベルで実装しています。additions/juggler以下は、Chrome DevTools Protocolに似た独自プロトコルで、PageHandlerやTargetRegistryなどがPlaywrightからの操作を仲介します。仕上げにmultibuild.pyが各OS向けバイナリを生成し、dist/へ出力します。build-testerディレクトリには、navigator.webdriverや自動化用グローバル変数、SpiderMonkey固有のエラースタック形式などをチェックするTypeScript製の検証スクリプトがあり、偽装の一貫性を継続的に確認しています。
- STEP 01
Dockerfileを見ると、Ubuntu上でbuild-essentialやrustc、golang-goなど大量の依存を入れてからmake setup-minimalとmake mozbootstrapを実行するため、初回ビルドは長時間かかると分かります。
- STEP 02
コンテナ起動時のENTRYPOINTはpython3 ./multibuild.pyなので、実行するとFirefox本体のクロスプラットフォームビルドが走り、dist/にバイナリが出力される流れです。
- STEP 03
pythonlib経由でPlaywrightから使う場合、build-tester/requirements.txtにplaywright<1.61という制約があり、新しいPlaywrightだとviewport.isMobile送信でコンテキスト作成が失敗する既知の問題があります。
- STEP 04
build-tester/scripts/server.pyはローカルにHTTPサーバーを立て、test_page_template.htmlとchecks-bundle.jsを配信し、そこへCamoufoxでアクセスしてフィンガープリント検証を行う設計です。
- STEP 05
collectors.tsやcore.tsを見ると、canvas・audio・WebGLのハッシュ収集に加え、navigator.webdriverやCDPスタックリークなど自動化検知シグナルを網羅的にチェックしていることが分かります。
手元でビルド・実行すれば、navigator.webdriverがfalseで、Playwright系グローバル変数やCDPスタックの痕跡がなく、SpiderMonkey固有のエラー形式を保ったFirefoxバイナリが手に入ります。加えてbuild-testerを回せば、どの偽装項目が本物のFirefoxと一致しているかをカテゴリ別のpass・fail結果として確認できます。
READMEに「開発中で本番運用には向かない場合がある」と明記されており、安定運用を前提にはできません。
ブラウザ本体の開発はCloverLabsAI/camoufoxやVulpineOSへ移っており、このリポジトリはチェックポイントをマージする本流コピーという位置付けです。
ビルドはFirefox本体をソースから丸ごとコンパイルするため、ディスク容量とビルド時間の要求が大きく、ccacheなしだと毎回コールドビルドになる旨の注記もあります。
PlaywrightはCamoufoxのJugglerプロトコルに合わせてバージョンが1.61未満に固定されており、最新のPlaywrightをそのまま組み合わせることはできません。
スクレイピングやAIエージェント用途で、JS注入型の偽装では検知されやすいと感じている開発者に向いています。MaskConfig.hppやJuggler実装、build-testerの検証コードまで実在する具体的な実装が確認でき、単なる謳い文句ではなくC++レベルの改変である点は判断材料として信頼できます。ただしビルドの重さと開発中という位置付けは、実際に触る前に理解しておくべきです。