Camoufoxとは何ですか?Python用のFirefoxアンチデクターブラウザです。
Specialist in Anti-Bot Strategies
TL;DR:
- CamoufoxはFirefoxを基にしたオープンソースのアンチデテクトブラウザであり、C++エンジンレベルでそのフィンガープリントを偽装します。これにより、ナビゲーターのプロパティ、スクリーン、WebGL、フォントなどが含まれ、検出器が読み取れるようなJavaScript層でパッチを当てるのではなくなります。
- PlaywrightをラップしたPythonパッケージとして提供されます。したがって、既に知っているPlaywright APIで操作します:
pip install camoufox[geoip]でブラウザを取得し、Camoufox(...)コンテキストマネージャで起動します。 - 注目の機能はgeoipマッチングプロキシです。プロキシを指定すると、Camoufoxが自動的にタイムゾーン、ロケール、地理位置をそのIPに合わせるため、フィンガープリントと出口ノードが同じストーリーを語ります。
- Camoufoxは明示的に開発中であり、安定したプロダクション用には位置付けられていません。安定した
camoufoxパッケージとアルファのcloverlabs-camoufoxパッケージは分岐します。また、ナイーブなbrowser.new_page()は、no_viewportコンテキストを回避することで解決されるブラウザビルドのビューポートエラーに当たる可能性があります。 - Camoufoxはフィンガープリントを偽装しますが、IPを提供したり、チャレンジを解決したりはしません。ハードターゲットに対しては、Scrapeless Scraping Browserがアクティブなセッション内で195カ国以上の住宅プロキシを使用してアンチデテクションを提供します — 同じPlaywrightのワークフローで、セルフホスティングは不要です。
- 無料で始められます。新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれます — app.scrapeless.comでサインアップしてください。
はじめに: 再検証を生き残るフィンガープリント
ほとんどのステルス自動化ツールはページ内からブラウザにパッチを当てます:挿入されたスクリプトがnavigator.webdriverをオーバーライドし、screenを再定義し、WebGLをシムします。問題は、そのパッチ自体が観察可能であること — 検出器はJavaScriptが報告する内容をC++レイヤーが報告する内容と比較し、不一致がバレるのです。Camoufoxはより困難なルートを選択します:ソースレベルでFirefoxを修正し、偽装した値がエンジンが実際に返すものとなるようにし、検出されるJavaScriptの挿入はありません。
CamoufoxはMozilla Public License 2.0のもとでオープンソースであり、Playwright for Pythonをラップし、約10,000のGitHubスターを集めています。また、メンテナは自身の声明でまだ積極的に開発中であり、安定したプロダクションを目指していないとも明言しています — これがどのように採用すべきかを形作ります。
このガイドでは、Camoufoxのインストール方法、Playwrightを通じての起動方法、何を偽装するか、geoipプロキシ機能、遭遇する荒削りな部分、ターゲットが良好なフィンガープリント以上のものが必要な場合のマネージドクラウドブラウザとの連携方法について説明します。
Camoufoxとは?
Camoufoxは、アンチデテクションがブラウザバイナリ内にあるカスタマイズされたFirefoxのビルドです。JavaScriptからフィンガープリントをオーバーライドするのではなく、FirefoxのGeckoエンジンをパッチして、値がネイティブのままになるようにしています:navigatorプロパティ、スクリーンとウィンドウのメトリック、WebGLベンダーとレンダラー、フォント、およびオーディオ/キャンバスの表面は、リアルなブラウザと区別できない偽装値を報告します。エンジンレベルで本物だからです。これらの表面は、ブラウザフィンガープリンティング研究 — 例えばEFFのCover Your Tracksプロジェクト — が最も特定的なエントロピーを持つことが示しています。
あなたは、Playwrightの周りに薄いPythonラッパーを通じてそれを制御します。つまり、Playwrightの全機能 — セレクター、evaluate、ナビゲーション、コンテキスト — が利用可能で、唯一Camoufox特有の部分はブラウザの起動方法とフィンガープリントオプションの渡し方です。例えば、osオプションはプラットフォーム全体のストーリーを回転させます:WindowsをリクエストするとブラウザはWin32とWindows Firefoxのユーザーエージェントを報告し、macOSをリクエストするとそのmac相当のものを報告します — これは下で確認されています。
Camoufoxのインストール
CamoufoxはPyPIからインストールします。[geoip]オプションでは、プロキシIPに合わせて地理位置を調整するのに使用するデータベースを引き込んでいます:
bash
# geoipオプション付きのPythonラッパーをインストール
pip install -U "camoufox[geoip]"
# Camoufoxが動かすパッチ済みFirefoxビルドを取得
python -m camoufox fetch
python -m camoufox fetchはブラウザのバイナリ(執筆時点ではベータ版のFirefox 135ビルド)とGeoIPデータベースをダウンロードします。あなたの午後を節約するためのパッケージに関する注意点:メンテナが管理する開発ラインは新しいリポジトリに移動しており、アルファリリースは別のパッケージ名cloverlabs-camoufoxで公開されています。安定したcamoufoxパッケージが起動時にブラウザプロトコルエラーをスローする場合(以下の荒削りな部分を参照)、アルファパッケージは現在のブラウザビルドにより密接に追従します。
Playwrightを通じて起動する
最小限の起動は、Playwrightブラウザを生成するCamoufoxコンテキストマネージャーです。この例は、エンジンレベルの代替が機能していることを確認できるように、偽装されたフィンガープリントを読み返します:
python
from camoufox.sync_api import Camoufox
# os="windows"により、全体のプラットフォームストーリーがWindowsとなります。
with Camoufox(headless=True, os="windows") as browser:
context = browser.new_context(no_viewport=True)
page = context.new_page()
page.goto("https://example.com")
print("platform:", page.evaluate("navigator.platform"))
print("ua:", page.evaluate("navigator.userAgent")[:75])
print("webdriver:", page.evaluate("navigator.webdriver"))
これを実行すると、platform: Win32、Windows NT 10.0; Win64; x64; rv:135.0のFirefoxユーザーエージェント、およびwebdriver: False — 自動化フラグは、ほとんどの検出ツールが最初に確認するものです。これらの値はすべて、注入されたオーバーライドではなく、パッチを当てたエンジンから来ています。
コンテキストのno_viewport=Trueは意図的です:現在のブラウザビルドでは、デフォルトのbrowser.new_page()の経路がBrowser.setDefaultViewportプロトコルエラーを引き起こす可能性があり、no_viewport=Trueでコンテキストを作成すると、これを回避しながらフィンガープリントをそのまま保つことができます。これは、プロジェクトの「開発中」というラベルが警告している鋭い側面です。
無料プランでAPIキーを取得する: app.scrapeless.com
geoipプロキシ機能
Camoufoxのスクレイピングにおける最も有用な機能は、フィンガープリントとネットワークの一貫性です。プロキシを渡してgeoipを有効にすると、ブラウザのタイムゾーン、ロケール、および地理的位置がプロキシのIPに合わせて自動的に設定されます:
python
from camoufox.sync_api import Camoufox
with Camoufox(
headless=True,
geoip=True, # タイムゾーン / ロケール / 地理的位置をプロキシのIPに合わせる
proxy={
"server": "http://proxy.example.com:8000",
"username": "user",
"password": "pass",
},
) as browser:
context = browser.new_context(no_viewport=True)
page = context.new_page()
page.goto("https://example.com")
print(page.title())
価値は一貫性です:ベルリンの住宅用IPがAmerica/New_Yorkとen-USを報告するブラウザと組み合わされることは、検出器がフラグを立てる矛盾であり、geoipはそれを取り除きます。Camoufoxがしないことは、あなたにプロキシを提供することです — そのIPはあなたが別途提供し、支払うものであり、管理されたブラウザが方程式を変えるところです。
荒い部分 — および運用のギャップ
ここで重要な二つの制限カテゴリがあり、それらは性質が異なります。
安定性のエッジは実際に存在し、認識されています。 CamoufoxのREADMEは、プロジェクトが開発中であり、安定した運用には適していない可能性があると明記しています。実際には、安定版とアルファパッケージのバージョンの分割や、上記のビューポートエラーのようなブラウザビルドの不一致として現れます。このプロジェクトは使用する価値があり、迅速に改善されるべきですが、プロダクションデプロイメントには、任意のpre-1.0依存関係に対して行うバージョン固定とターゲットごとのテストが必要です — そしてそのMPL-2.0ライセンスは、商業チームが組み込む前に確認すべき義務を伴います。
運用のギャップは構造的かつ恒久的です。 完璧なフィンガープリントはあなたのIPを移動させたり、チャレンジページに答えたりしません。Camoufoxはあなたのインフラ上で、あなたのエグレスから動作するため、あなたのIP範囲にレートリミティングをかけるターゲットやトラフィック確認のインタースティシャルは、あなたのネットワークに応答し、あなたのnavigatorオブジェクトには応答しません。あなたは依然としてプロキシ(上記のgeoipペアリング付き)とチャレンジのための計画が必要です — そしてそれらは両方とも、あなたが組み立てて運営する別々のシステムです。
Scrapeless Scraping Browserとの連携
ターゲットが強力なフィンガープリント かつ クリーンな住宅用エグレス かつ チャレンジ処理が必要な場合 — そして三つのシステムを運営したくない場合 — Scrapeless Scraping Browserはそれらを一つの管理されたセッションにまとめます。それは、自己開発されたChromiumによって動かされる検出回避クラウドブラウザであり、195カ国以上で選択された住宅用プロキシを持ち、CDPエンドポイントを公開してPlaywrightに接続します。ワークフローは、Camoufoxと同様にPlaywrightネイティブのままです:
python
import os
from playwright.sync_api import sync_playwright
# ScrapelessクラウドブラウザのWebSocketエンドポイントを構築します(米国の住宅用エグレス)
API_KEY = os.environ["SCRAPELESS_API_KEY"]
ws_endpoint = (
"wss://browser.scrapeless.com/api/v2/browser"
f"?token={API_KEY}&session_ttl=180&proxy_country=US"
)
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(ws_endpoint)
page = browser.contexts[0].new_page() if browser.contexts else browser.new_page()
page.goto("https://example.com", wait_until="domcontentloaded")
print(page.title())
browser.close()
トレードオフは明確です: インフラストラクチャ上でエンジンレベルのフィンガープリント制御が必要な場合はCamoufoxを、フィンガープリント、IP、チャレンジ処理をサービスとして提供してほしい場合はScrapelessを選択してください。Scrapelessのドキュメントには完全なパラメーターセットが含まれており、料金は使用ベースで、無料プランもあります。GeoIPペアリングはそれを支えるプロキシの質に依存するため、ウェブスクレイピング用の住宅用プロキシに関するガイドは、このペアリングが依存する出口側をカバーしています。
結論: エンジンレベルのステルス、縫い目の名前付け
Camoufoxのアプローチ — パッチされたFirefoxの内部でフィンガープリントを偽装するのではなく、その上で偽装する — は技術的に優れたアイデアであり、GeoIPにマッチしたプロキシ処理は多くのステルスツールが無視する一貫性の問題を解決します。注意点はその前生産状態(バージョンの固定、ターゲットごとのテスト、パッケージ分割に留意)で、フィンガープリントツールであり、完全なスクレイピングスタックではないということです。
インフラストラクチャを制御し、深いフィンガープリント制御を希望する場所にデプロイし、難易度の高い高価値ターゲット — IPの評判やチャレンジに関しても制限がかかるターゲット — をScrapelessスクレイピングブラウザのセッションを通じてルーティングします。どちらもPlaywrightを使用するため、1つのコードベース内でのルーティング選択となり、2つのリライトではありません。
AI駆動のデータパイプラインを構築する準備はできましたか?
私たちのコミュニティに参加して、無料プランを請求し、アンチ検出パイプラインを構築している開発者とつながりましょう: Discord · Telegram。
app.scrapeless.comにサインアップして、無料のスクレイピングブラウザのランタイムを利用し、Camoufoxが自己ホストするターゲットを扱っている間に最も困難なターゲットを通じて送信してください。
よくある質問
Q: Camoufoxは通常のブラウザにステルスプラグインでパッチを当てることと何が違うのですか?
CamoufoxはFirefoxのC++エンジン内でフィンガープリント値を偽装するため、ページ内のJavaScriptは偽装された値を直接読み取り、検出されるオーバーライドが注入されることはありません。プラグインベースのステルスは、JavaScriptから値をパッチしますが、スクリプトが報告する内容とエンジンが報告する内容の間に検出可能なギャップを残します。
Q: CamoufoxはPlaywrightまたはPuppeteerのどちらで使用しますか?
Playwrightを通じてPython APIで使用します。CamoufoxはパッチされたFirefoxを起動し、Playwrightブラウザオブジェクトを取得できるPythonラッパーとして提供されているため、その後のスクリプトは通常のPlaywrightとなります。
Q: Camoufoxは本番環境に適していますか?
そのメンテナーは、このツールが開発中であり、安定した本番環境には適さない可能性があると述べています。1.0以前の依存関係のように扱い、バージョンを固定し、アルファ版が別のcloverlabs-camoufoxパッケージに含まれていることに留意し、依存する前に各ターゲットをテストしてください。
Q: Camoufoxにプロキシは含まれていますか?
いいえ。Camoufoxはフィンガープリントを偽装し、geoip=Trueを使用することで、提供されたプロキシに対してタイムゾーンとジオロケーションを調整しますが、プロキシ自体は利用者が提供する必要があります。Scrapelessスクレイピングブラウザは、195か国以上の住宅用プロキシをセッションにバンドルしています。
Q: なぜCamoufoxをScrapelessと組み合わせるのですか?単にプロキシを追加するのではなく。
難しいターゲットは、フィンガープリントの質、IPの評判、チャレンジページという3つのチェックを組み合わせているため、自己ホストされたフィンガープリントツールは最初の要素しか対応できません。Scrapelessスクレイピングブラウザは、アンチ検出Chromium、住宅用出口、およびチャレンジ処理を1つの管理されたセッションとして提供するため、別々のシステムを構築・運用せずに全体のセットをカバーできます。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



