見出し画像

camofox-browser: AIエージェントのWebアクセスを解放する、"ブロックされない"ブラウザ技術

AIにWebサイトを自動で見て回らせたい、情報を収集させたい。そう考えた多くの開発者や企業が、ある大きな壁にぶつかります。それは、Webサイトによる「自動化(ボット)検出システム」です。X(旧Twitter)やAmazon、その他多くのモダンなWebサービスは、こうしたプログラムによるアクセスを厳しく制限・ブロックしています。

今回ご紹介する「camofox-browser」は、この問題を根本から解決するために生まれた、AIエージェントのための特別なブラウザツールです。まるで魔法の「見えないマント」のように、AIエージェントが人間と同じようにWebサイトを自由に、そしてブロックされることなく閲覧できるようにします。

この記事では、まず一般の読者の方にも分かるように「なぜ自動化はブロックされるのか」「camofox-browserは何がすごいのか」を解説し、後半では開発者向けにその核心技術を深く掘り下げていきます。


【一般読者向け解説】AIのための「見えないマント」

なぜAIはWebサイトから締め出されるのか?

私たちが普段Webサイトを見るとき、ブラウザは無意識のうちにたくさんの「自己紹介」をしています。使っているOSやブラウザの種類、画面の大きさ、インストールされているフォントなど、これらの情報は組み合わせることで、一人ひとりに固有の「ブラウザ・フィンガープリント(指紋)」となります。

Webサイト側は、このフィンガープリントを見て「このアクセスは本物の人間か、それともプログラム(ボット)か?」を判断しています。一般的な自動化ツールは、この「人間らしい振る舞い」や「自然なフィンガープリント」の偽装が苦手です。そのため、ウェブサイトの"警備員"に「君は怪しいプログラムだね」と見抜かれ、すぐに入り口で追い返されてしまうのです。

camofox-browserの秘密兵器:DNAレベルの"なりすまし"

多くの自動化ツールが行う偽装が、付け髭やメガネで変装するレベルだとすれば、camofox-browserの偽装はDNAレベルで別人になりすますようなものです。

その秘密は、偽装を行う「層」にあります。一般的なツールがアプリケーションの表面(JavaScript)で「私は人間です」とごまかそうとするのに対し、camofox-browserはブラウザの設計図ともいえる核の部分(C++)で偽装を行います。これにより、Webサイトがどんなに鋭い質問を投げかけても、その応答はすべて「本物の人間」と見分けがつかないものになります。

この革新的なアプローチにより、AIエージェントはこれまでアクセスできなかったサイトにも堂々と入り、情報を収集したり、タスクをこなしたりすることが可能になるのです。


【開発者・専門家向け詳細解説】

問題の本質:JavaScriptレベルにおける偽装の限界

PlaywrightやPuppeteerに代表される自動化ツールは、協調的なサイトでは問題なく動作します。しかし、Cloudflareの背後にあるサイトやGoogle、Amazonなどにアクセスすると、リクエストはレート制限どころか、即座に拒絶されるのが現実です。

これらの検出システムは、WebGLレンダラー文字列、AudioContextのサンプルレート、`navigator.hardwareConcurrency`、画面ジオメトリ、WebRTCによるIPリーク、バッテリーAPIの癖、音声合成のボイスなど、数百ものパラメータからブラウザのフィンガープリントを生成します。

一般的な回避策である「stealth plugin」は、`navigator.webdriver`のようなプロパティを上書きしますが、そのパッチ自体が新たなフィンガープリントのシグナルとなり得ます。根本的な問題は、JavaScriptで上書きされたプロパティは、JavaScriptによってその矛盾を調査できる点にあります。プロパティ記述子(Property descriptors)、プロトタイプチェーン、そして`function.toString()`の結果を見れば、それがネイティブな実装でないことは容易に露見してしまうのです。

解決策:C++層でのインターセプト

camofox-browserの核となるCamoufox(Firefoxのフォーク)は、この問題をC++レベルで解決します。JavaScriptが`navigator.hardwareConcurrency`を呼び出すとき、その処理はFirefoxのC++実装に委ねられます。Camoufoxは、そのC++の戻り値を変更することで、JavaScript側には完全に自然で、疑う余地のない偽装値を渡します。

CamoufoxのREADMEにはこう記されています。

Camoufoxでは、データはC++の実装レベルで傍受されるため、その変更はJavaScriptによる調査では検出不可能です。

具体的には、以下のようなパッチが適用されています。これはウィンドウの幅を返す関数の例です。設定ファイルに偽装値があればそれを返し、なければ通常の処理を実行します。

// from fingerprint-injection.patch:
double nsGlobalWindowInner::GetInnerWidth(ErrorResult& aError) {
  if (auto value = MaskConfig::GetDouble("window.innerWidth"))
    return value.value();
  FORWARD_TO_OUTER_OR_THROW(GetInnerWidthOuter, (aError), aError, 0);
}

このパターンは、ウィンドウジオメトリ、navigatorフィールド、WebGLパラメータ(GPUフィンガープリント)、WebRTCのIPマスキング、オーディオフィンガープリント、位置情報、バッテリーAPI、音声合成ボイスなど、多岐にわたる項目に適用されています。さらに、`MouseTrajectories.hpp`では、検出システムがインタラクションの「質」をも評価する傾向に対応するため、ベジェ曲線に基づいた人間らしいマウストレース生成機能も実装されています。

LLMのためのアーキテクチャ:なぜサーバーなのか?

camofox-browserが単なるライブラリではなく、REST APIサーバーとして提供されているのには明確な理由があります。それは、LLM(大規模言語モデル)のコンテキストウィンドウへの最適化です。

例えば、Googleの検索結果ページのHTMLは約500KBですが、LLMが解釈しやすいアクセシビリティツリー形式にすると、わずか5KB程度になります。この100倍のデータ削減は、エージェントの処理効率とコストに絶大な影響を与えます。

そのため、camofox-browserは以下の機能を提供します。

  • アクセシビリティスナップショット: HTMLの代わりに軽量な構造データを提供。

  • 要素参照 (e1, e2...): 変動しがちなCSSセレクタの代わりに、安定した要素参照IDでUI操作を実行。

  • マクロ: `@google_search`のように、頻出する操作を抽象化。

APIの利用はcURLを使えば非常にシンプルです。

# 1. 新しいタブを作成
curl -X POST http://localhost:9377/tabs \
  -d '{"userId": "agent1", "sessionKey": "task1", "url": "https://google.com"}'

# 2. ページの構造化されたスナップショットを取得
curl "http://localhost:9377/tabs/TAB_ID/snapshot?userId=agent1"

# 3. 参照ID 'e3' の要素をクリック
curl -X POST http://localhost:9377/tabs/TAB_ID/click \
  -d '{"userId": "agent1", "ref": "e3"}'

最後の関門:プロキシの重要性

C++による偽装はブラウザのアイデンティティを解決しますが、IPのアイデンティティは解決しません。アンチボットシステムの多くは、IPがデータセンターのものか、一般家庭(レジデンシャル)のものかをチェックします。

したがって、ISPプロキシやレジデンシャルプロキシを利用することは、依然として成功率を上げるための重要な要素です。アンチボットシステムは、ブラウザフィンガープリントとIPの両方を相関させて監視しています。「同じフィンガープリントが100個のIPから来る」のも、「1つのIPから100個のフィンガープリントが来る」のも、同様に不自然です。セッション内でフィンガープリントとIPを安定させ、セッションごとにそれらをローテーションさせる戦略が有効です。

利用開始方法

camofox-browserはOpenClawのプラグインとして、または単体で利用できます。

# OpenClawプラグインとしてインストール
openclaw plugins install @askjo/camofox-browser

# またはソースからビルドして起動
git clone https://github.com/jo-inc/camofox-browser
cd camofox-browser && npm install && npm start

# サーバーのヘルスチェック
curl http://localhost:9377/health

このリポジトリはMITライセンスで公開されており、まだ開発の初期段階です。OpenClawコミュニティにとって、そしてWebオートメーションに関わるすべての開発者にとって、このツールが有用であることを願っています。バグの報告やコントリビューションも歓迎されています。

#AI #AIエージェント #Webスクレイピング #自動化 #camofox -browser #Camoufox #OpenClaw #ボット対策 #ブラウザフィンガープリント #LLM #開発 #技術 #オープンソース

いいなと思ったら応援しよう!