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

feder-cr/invisible_playwright

Firefox の C++ レベルでのパッチにより、ボット検知を回避してスクレイピングやテスト自動化を実現するステルス Playwright ライブラリです。

既存のPlaywrightコードをほぼ書き換えずに、navigator・GPU・WebGL・canvas・音声・フォントまで、C++レベルでFirefox本体を書き換えて偽装した状態で動かせます。JS shimではなくエンジン自体を patch しているため、init-script頼みの手法より検出耐性が強く、seed 1つで同じ仮想フィンガープリントを何度でも再現できます。reCAPTCHA・hCaptcha・Cloudflare Turnstileなどで止められていたスクレイピングや、金融・チケット・旅行予約サイトの監視作業を、今日その環境のまま試したくなる仕組みです。

01 / 概要
何をするものか一文で言うと
ひとことでFirefox の C++ レベルでのパッチにより、ボット検知を回避してスクレイピングやテスト自動化を実現するステルス Playwright ライブラリです。

本リポジトリは、C++レベルでパッチを当てたFirefoxをPlaywright経由で操作するPythonラッパーです。navigator・canvas・WebGL・音声・WebRTCなど約200項目のフィンガープリントをseedから生成し、ブラウザ内部に直接組み込みます。既存のPlaywrightコードはimport文とlaunch部分の2行を書き換えるだけで移行できると説明されています。

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

核心は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 にあり、本リポジトリには含まれません。

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

    pip install invisible-playwright を実行した時点では、Firefox本体はまだ手元にありません。

  2. STEP 02

    python -m invisible_playwright fetch を実行すると、約238MBのダウンロードとsha256照合が走り、544MBに展開されるため待ち時間が発生します。

  3. STEP 03

    macOSでは署名がad-hocのため、Gatekeeperの警告を避けるにはxattr -dr com.apple.quarantineを一度実行する必要があります。

  4. STEP 04

    サンプルコードのimport文とlaunch部分だけを書き換えて実行すると、通常のPlaywright BrowserとPageがそのまま使えます。

  5. STEP 05

    seed=42のように固定すると、毎回同じcanvasハッシュや音声特徴が再現され、ログにseedを残せば後から再現できます。

  6. STEP 06

    invisible_coreのバージョンが一つでもずれていると、インポート時に_pin.pyがエラーまたは自動修復を行い、起動前に処理が止まります。

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

得られるのは、実プロセスのFirefoxでありながら約200項目のフィンガープリント値が矛盾なく揃ったブラウザです。手元にはPlaywrightのBrowserとPageオブジェクトがそのまま残るため、既存の自動化・スクレイピングコードに組み込めます。seedとpin設定を使えば、同じ環境を後から再現したりチームで共有したりできます。

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

実際のFirefoxパッチのソースは本リポジトリではなく別リポジトリfeder-cr/firefox_antidetect_patchにあり、中身はここからは検証できません。

02

README自身が明言する通り、ブラウザ側を整えてもプロキシが公開IPだと検出は避けられません、公開プロキシの約9割は既知のブロックリストに載っています。

03

invisible_coreへの厳密なバージョン依存が強く、コアの公開タイミングがずれると新規インストールが失敗する設計になっています。

04

macOSは未Notarizeのため、初回はGatekeeperの警告を手動で解除する必要があります。

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

Playwrightで既に自動化やスクレイピングを行い、reCAPTCHAやCloudflareの壁に当たっている開発者向けの選択肢です。2行の書き換えで既存コードに載せられる設計なので、導入コストは小さそうです。ただし核心のFirefoxパッチとフィンガープリント生成ロジックはinvisible_coreと別リポジトリに分離されており、本リポジトリのソースだけでは全貌を検証できません。テストスイートやpre-pushフック、CI設定の作り込みからは継続的な保守体制がうかがえますが、検出耐性はサイトごとに異なるため、seedとpin機能で対象サイトでの挙動を確認してから本番投入するのが安全です。

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

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

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