
invisible_playwright v0.7.0
Playwright用の無料アンチディテクトブラウザステルス:検出されないヘッドレスFirefoxフィンガープリント。Pythonスクレイピング、reCAPTCHAおよびボット検出バイパス。オープンソース
Playwright はアンチボットやキャプチャに検出されます。
こちらは未検出のフィンガープリントを備えたアンチ検出 Firefox 上で動作し、既存の Playwright コードと互換性があります。

仕組み
アンチボットは2つの問いを投げかけ、reCAPTCHA、hCaptcha、Cloudflare Turnstile がその回答を採点します。invisible_playwright はその両方に「はい」と答えます。
1. これは本物のブラウザか? はい。C++ ソースレベルでパッチを当てた Firefox です。
- ブラウザのフィンガープリントはページに注入されるのではなく、エンジン内部で設定されます: navigator、screen、GPU/WebGL、canvas、フォント、オーディオ、WebRTC、タイムゾーン、ネットワーク。ヘッドレスでもヘッド付きでも、どちらでも同じ値になります。
- JS シムも、オーバーライドも、読み取られる継ぎ目もありません。
2. 本物の人間が使っているか? はい。操作はドライバー内で人間らしくされます。
- すべてのクリック、ホバー、ドラッグは人間のタイミングを伴う自然なマウス経路に従い、カーソルがテレポートすることはありません。
- 各入力は本物のマウスとバイト単位で同一です: 本物の入力ソース、圧力、信頼されたイベント。
インストール
Windows の場合、PowerShell で:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
uv init --python ">=3.11" my-project
cd my-project
uv add invisible-playwright
uv run invisible-playwright fetch # one-time download, sha256-verified: 240 MB, about 550 MB unpacked
Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv init --python ">=3.11" my-project
cd my-project
uv add invisible-playwright
uv run invisible-playwright fetch # one-time download, sha256-verified: 262 MB (x86_64) / 253 MB (arm64), about 550 MB unpacked
対応プラットフォーム: Windows x86_64、Linux x86_64 / arm64。
次に、以下の例のいずれかを my-project 内の main.py として保存し、uv run main.py で実行します。
使用方法
セッションごとのランダムフィンガープリント
Playwright の API、同期・非同期の両方に対応し、コード変更は不要です。 同じオブジェクト、同じ呼び出し、同じ戻り値です。一部のサーフェスは対象外です — トレーシング、HAR、CDP、API リクエストコンテキスト — これらはそれぞれ、黙って誤動作するのではなく、理由を述べた一文で拒否します。すでに Playwright を使用している場合、切り替えは 2 行です:
- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
- browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:
すべてのセッションは固有のフィンガープリント(GPU、オーディオ、フォント、画面、約200フィールド)とベジェ曲線のマウス動作を取得します。
同期
from invisible_playwright import InvisiblePlaywright
with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = browser.new_page()
page.goto("https://example.com")
page.click("#submit") # mouse arcs to the button on a Bezier curve
非同期
from invisible_playwright.async_api import InvisiblePlaywright
async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
await page.click("#submit")
browser オブジェクトは playwright.sync_api.Browser / playwright.async_api.Browser です。すべての Playwright メソッドがそのまま動作します。
実行を再現するためにシードをログに記録します:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
再現可能なフィンガープリント
with InvisiblePlaywright(seed=42) as browser:
... # same GPU, same canvas hash, same audio context, every run
プロキシ
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
サポートされるスキーム: socks5、socks4、http、https。DNS はデフォルトでプロキシ経由でルーティングされ、ローカルリークは発生しません。
タイムゾーン
ブラウザのタイムゾーンは timezone= に従います:
# default: timezone is auto-derived from the egress IP (proxy egress if a
# proxy is set, otherwise the host's own public IP)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# explicit IANA zone always wins, the only way to force a specific zone
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
特定のフィンガープリントフィールドの固定
デフォルトではすべてが seed から生成されます。残りは seed 由来のまま、特定の値を強制するには:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)",
"gpu.vendor": "Google Inc. (AMD)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
GPU の pin は自由な文字列を設定するのではなく、検証済みのペルソナのいずれかを選択します。これは、約 81 個の getParameter 値と拡張機能のリストがレンダラー名とともに移動し、検出器がそれらをレンダラー名と照合するためです。プールに存在しない名前を指定すると例外が発生し、エラーには存在する名前の一覧が表示されます。
pin 可能なキーの完全なリスト、pin がベイジアンサンプラーとどのように相互作用するか、および一般的なパターンについては docs/pinning.md を参照してください。
CLI
インストールされるコマンドはハイフン付きの invisible-playwright です。python -m invisible_playwright も同様に動作し、PATH 上に何も必要としません。
invisible-playwright fetch # download the engine if missing, check every cached
# one against the seal, print the path
invisible-playwright version # wrapper, core and engine versions, and where the
# engine is cached
ドキュメント、ガイド、比較
スクリプトよりプロンプトの方がよい場合。 このページはエンジンであり、Python
ライブラリとして提供されています。コードを書かずに使う方法は2つあり、どちらも1行です。すでにお使いのMCPクライアント(Claude Code、Claude Desktop、Cursor)から
claude mcp add stealth -- uvx aihawk を実行する方法は
MCPサーバーのページを参照してください。または、
インターフェースとモデルが含まれ、OpenRouterのキーだけが必要な
uvx aihawk ui --openrouter-key sk-or-... を使う方法は
AIHawkを参照してください。土台となるエンジンは同じで、2つ目は
1つ目のクライアントです。
すべての内容は wiki でより読みやすく、検索可能な形で、 1つの平坦なリストではなく4つのセクションに整理されています:
- ドキュメント - インストール、素のPlaywrightからの2行での切り替え、プロキシ/タイムゾーンの 設定、特定フィールドの固定、CLI。
- ガイド - 検出が実際にどのように 機能するかを7つのグループで解説:ブラウザのアイデンティティ、canvas/WebGL/フォント/ オーディオ、ネットワークとWebRTC、自動化レイヤー、AIエージェント、ソースから 解説する検出器そのもの、そしてテスト。
- 比較 - Camoufox、Patchright、nodriver、playwright-stealthとの比較、および一般に ChromiumよりFirefoxを選ぶ理由。
- 統合 - Scrapy、Crawlee、Robot Framework、CodeceptJS、テストランナー、Playwright MCP、そして 適合しないフレームワークを名前付きで紹介。
どこから始めればよいかわからない場合は、Playwrightを検出されないようにする3つの方法 が他の多くのページがリンクする地図であり、Playwrightが1つのサイトでボットとして検出される がトラブルシューティングの順序、そしてnavigator.webdriverはあなたが思うような手がかりではない がこの分野で最も有名なプロパティと、それを単独でパッチしてもほとんど何も得られない理由を説明しています。