本リポジトリは、C++レベルでパッチを当てたFirefoxをPlaywright経由で操作するPythonラッパーです。navigator・canvas・WebGL・音声・WebRTCなど約200項目のフィンガープリントをseedから生成し、ブラウザ内部に直接組み込みます。既存のPlaywrightコードはimport文とlaunch部分の2行を書き換えるだけで移行できると説明されています。
核心はJavaScriptでの上書きではなく、Firefox本体を書き換えている点です。README によると、フィンガープリントはエンジン内部で設定されるため、ヘッドレスでもヘッドフルでも同じ値になります。起動前に python -m invisible_playwright fetch で約238MBのバイナリを取得し、sha256で検証してキャッシュします。値の生成やバイナリ管理は別パッケージ invisible_core が担当し、本パッケージは pyproject.toml でそのバージョンを一つに厳密固定します。インポート時には _pin.py がバージョン不一致を検知し、必要なら修復を試みます。マウス操作は _behaviour.py がクリック以外の静止時間や無意味な動きまでseedから計画し、_motion が1ストロークの速度カーブを描き、_cursor が実イベントとして送出する三層構造です。プロキシは socks5・socks4・http などに対応し、DNSもプロキシ経由に固定、タイムゾーンはegress IPから自動導出するか明示指定できます。なお実際のFirefoxパッチのソース自体は別リポジトリ feder-cr/firefox_antidetect_patch にあり、本リポジトリには含まれません。
- STEP 01
pip install invisible-playwright を実行した時点では、Firefox本体はまだ手元にありません。
- STEP 02
python -m invisible_playwright fetch を実行すると、約238MBのダウンロードとsha256照合が走り、544MBに展開されるため待ち時間が発生します。
- STEP 03
macOSでは署名がad-hocのため、Gatekeeperの警告を避けるにはxattr -dr com.apple.quarantineを一度実行する必要があります。
- STEP 04
サンプルコードのimport文とlaunch部分だけを書き換えて実行すると、通常のPlaywright BrowserとPageがそのまま使えます。
- STEP 05
seed=42のように固定すると、毎回同じcanvasハッシュや音声特徴が再現され、ログにseedを残せば後から再現できます。
- STEP 06
invisible_coreのバージョンが一つでもずれていると、インポート時に_pin.pyがエラーまたは自動修復を行い、起動前に処理が止まります。
得られるのは、実プロセスのFirefoxでありながら約200項目のフィンガープリント値が矛盾なく揃ったブラウザです。手元にはPlaywrightのBrowserとPageオブジェクトがそのまま残るため、既存の自動化・スクレイピングコードに組み込めます。seedとpin設定を使えば、同じ環境を後から再現したりチームで共有したりできます。
実際のFirefoxパッチのソースは本リポジトリではなく別リポジトリfeder-cr/firefox_antidetect_patchにあり、中身はここからは検証できません。
README自身が明言する通り、ブラウザ側を整えてもプロキシが公開IPだと検出は避けられません、公開プロキシの約9割は既知のブロックリストに載っています。
invisible_coreへの厳密なバージョン依存が強く、コアの公開タイミングがずれると新規インストールが失敗する設計になっています。
macOSは未Notarizeのため、初回はGatekeeperの警告を手動で解除する必要があります。
Playwrightで既に自動化やスクレイピングを行い、reCAPTCHAやCloudflareの壁に当たっている開発者向けの選択肢です。2行の書き換えで既存コードに載せられる設計なので、導入コストは小さそうです。ただし核心のFirefoxパッチとフィンガープリント生成ロジックはinvisible_coreと別リポジトリに分離されており、本リポジトリのソースだけでは全貌を検証できません。テストスイートやpre-pushフック、CI設定の作り込みからは継続的な保守体制がうかがえますが、検出耐性はサイトごとに異なるため、seedとpin機能で対象サイトでの挙動を確認してから本番投入するのが安全です。