目次を表示する

browser-use完全解説

第3章 機能詳細 ── OSS版とクラウド版の全貌

第3章 機能詳細 ── OSS版とクラウド版の全貌


二層の製品構造

browser-useは2025年後半から「OSS版(オープンソース)」と「クラウド版(Browser Use Cloud)」の二層構造が明確になった。

graph TD
    subgraph OSS["browser-use OSS(オープンソース)"]
        O1["Pythonライブラリ"]
        O2["ローカルPlaywrightブラウザ"]
        O3["任意のLLM(API自己調達)"]
        O4["セルフホスト"]
        O5["無料(LLMコスト別途)"]
    end

    subgraph Cloud["Browser Use Cloud(クラウドサービス)"]
        C1["Python / TypeScript SDK"]
        C2["ステルスブラウザ(検出回避)"]
        C3["最適化済みChatBrowserUseモデル"]
        C4["CAPTCHA自動解決"]
        C5["195+カ国のプロキシ"]
        C6["マネージドインフラ"]
        C7["4時間セッション対応"]
    end

    OSS -. "CDPで接続" .-> Cloud

同じエージェントコードでローカルとクラウドを切り替えられる設計になっており、開発はOSSで行い、本番はCloudに切り替えるワークフローが標準的だ。


OSS版の機能

コアエージェント機能

自然言語タスク指定:タスクを自然言語で記述するだけで実行できる。

agent = Agent(
    task="""
    Amazon.co.jpで「Python 機械学習」の本を検索し、
    評価が4.0以上・値段が3000円以内の本を3冊リストアップして
    """,
    llm=llm,
    browser=browser,
)

マルチLLMサポート:LangChain経由で主要LLMを全てサポートする。

# Claude
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-4-6")

# OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")

# Google Gemini
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash")

# ローカルモデル(Ollama)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen2.5:7b")

カスタムアクション(ツール):エージェントが使えるアクションを拡張できる。

from browser_use import Agent, Controller
from browser_use.browser.context import BrowserContext

controller = Controller()

@controller.action("データベースに保存する", param_model=SaveDataRequest)
async def save_to_db(params: SaveDataRequest, browser: BrowserContext):
    # カスタム処理
    await db.insert(params.data)
    return ActionResult(extracted_content="保存完了")

agent = Agent(
    task="...",
    llm=llm,
    controller=controller,  # カスタムアクション付きコントローラー
)

マルチタブ対応:複数タブを同時に操作できる。比較サイトで複数商品を並行調査するようなユースケースに対応。

並列エージェント:複数のエージェントインスタンスを並列実行できる。

# 3つのエージェントを並列実行
tasks = ["ECサイトAで価格調査", "ECサイトBで価格調査", "ECサイトCで価格調査"]
agents = [Agent(task=t, llm=llm) for t in tasks]
results = await asyncio.gather(*[a.run() for a in agents])

ブラウザプロファイル管理

既存のChromeプロファイル(Cookieやログイン状態)をそのまま引き継いで使える。

from browser_use import BrowserConfig, BrowserContextConfig

config = BrowserConfig(
    browser_binary_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    new_context_config=BrowserContextConfig(
        cookies_file="cookies.json",   # 保存済みCookieを使用
        storage_state="state.json",   # LocalStorage / SessionStorage
    )
)

これにより「ログインが必要なサービスへのアクセス」を認証フローの自動化なしに実現できる。ただしセキュリティリスクの観点から、本番用クレデンシャルとは分離した専用プロファイルの使用が推奨される(後述)。

システムプロンプトのカスタマイズ

agent = Agent(
    task="...",
    llm=llm,
    # 既存のシステムプロンプトに追記
    extend_system_message="""
    日本語でのみ応答してください。
    価格情報は必ず税込みで報告してください。
    エラーが発生した場合は、諦めずに3回まで別の方法を試みてください。
    """,

    # または既存プロンプトを完全に上書き(高度な使い方)
    # override_system_message="...",
)

クラウド版の機能

ステルスブラウジング

本番のWebスクレイピングで最大の障壁がBot検出だ。Cloudflare・PerimeterX・DataDomeなどの主要アンチボットシステムが、自動化ブラウザの特徴(TLSフィンガープリント・User Agent・マウス動作パターン等)を検出してブロックする。

クラウド版が提供するステルスブラウザは以下を組み込んでいる。

機能説明
TLSフィンガープリント偽装本物のChromeブラウザと区別できないTLS挙動
プロキシローテーション195カ国以上の住宅用IPプロキシを自動切り替え
CAPTCHA自動解決reCAPTCHA・hCaptcha等の自動突破
ユーザーエージェント管理実在のブラウザプロファイルに一致するUA
マウス動作自然化機械的でない自然なマウスカーソル軌跡

最適化済みモデル(ChatBrowserUse)

Browser Use Cloudは汎用LLMではなく、ブラウザ操作に特化したモデル ChatBrowserUse を提供している。

精度比較(WebVoyagerベンチマーク)

ChatBrowserUse      83.3%(BU 2.0)
Claude Opus 4.5     83.3%(同等精度)
GPT-4o              ~76%

速度比較(平均タスク所要時間)

ChatBrowserUse   62秒
Claude Opus 4.5  103秒(ChatBrowserUseより40%遅い)

同等の精度をより短時間・低コストで実現するドメイン特化モデルだ。

SDK v3(2026年2月リリース)

# v3の新しいclient.run() API
from browser_use import AsyncBrowserUse

async def main():
    client = AsyncBrowserUse(api_key="bu_...")

    # セッション作成・ポーリング・結果取得を一括処理(最大4時間待機)
    result = await client.run(
        task="この採用フォームに情報を入力して送信してください",
        model="chatbrowseruse",  # または "claude-sonnet-4-6" 等
    )
    print(result)

client.run() は内部で「セッション作成 → 2秒ポーリング → 完了まで待機(最大4時間)」を自動処理する。

セッションの高度な制御

# 非同期モニタリング(Webhookベース)
session = await client.sessions.create(
    task="...",
    on_message=lambda msg: print(f"ステップ: {msg}"),  # リアルタイムストリーミング
    webhook_url="https://yourapp.com/webhook",           # 完了時のWebhook
)

# Human-in-the-Loop:エージェント実行中に人間が介入
# ブラウザを直接操作して、エージェントが続きを引き継ぐ
await session.pause()   # エージェントを一時停止
# ... 人間がブラウザを操作 ...
await session.resume()  # エージェントが再開

LLM選定の実際

browser-useで最も頻繁に語られるのが「どのモデルを使うべきか」という問いだ。コミュニティの知見を整理する。

quadrantChart
    title LLMモデル選択の指針(browser-use用途)
    x-axis コスト低 --> コスト高
    y-axis 精度低 --> 精度高
    quadrant-1 精度・コスト両立
    quadrant-2 高精度・高コスト
    quadrant-3 低精度・低コスト
    quadrant-4 コスト安定・精度中程度
    ChatBrowserUse: [0.35, 0.84]
    Claude Sonnet 4.6: [0.55, 0.82]
    Claude Opus 4.6: [0.85, 0.85]
    GPT-4o: [0.65, 0.77]
    Gemini 2.0 Flash: [0.25, 0.72]
    Qwen2.5:7b Ollama: [0.05, 0.55]

本番推奨ChatBrowserUse(クラウド版)または Claude Sonnet 4.6 のバランスが良い。 プロトタイプ・開発用Gemini 2.0 Flash がコストパフォーマンスで優れる。 完全ローカル・オフライン環境Qwen 2.5:7b(Ollama)が動作するが、精度は低い。 高精度が必要な本番業務Claude Opus 4.6 だが、コストが高いため用途を選ぶ。