Browser Use(パッケージ名 browser-use、日本語では「ブラウザユース」)は、大規模言語モデル(LLM)にWebブラウザを操作させるオープンソースのPythonライブラリです。「このリポジトリのスター数を調べて」「この条件で請求書の控えを依頼して」と指示すると、エージェントがページを開き、クリックや入力を重ねてタスクを終えます。2026年10月26日公開の 0.13.14 時点で、GitHubのスターは約11.9万。この記事では、インストールから最初のエージェント実行までのコード、モデル別の1タスク費用、3.0で書き方が変わったCLI、MCPサーバーとしての使い方、Browser Use Cloudの料金、Playwright MCPとの選び分けまでを、0.13.14のソースと照合して整理します。
まとめ:Browser Useの要点
- 正体:ページの操作可能な要素とスクリーンショットをLLMに渡し、次の操作を決めさせるOSS。MITライセンスで無料、Python 3.11以上が必要です。
- 使い方は3通り:自分のコードに組み込む「Pythonライブラリ」、Claude CodeやCodexにブラウザを持たせる「CLI」、エージェントごと任せる「Cloud API」。
- 最短手順:
uv add browser-use→ .env にAPIキー →Agent(task=..., llm=...)をawait agent.run()。Chromeが入っていなければ初回に Chromium を自動で取得します。 - CLIは3.0で別物:
openやstateなどのサブコマンドは廃止され、Pythonのコードを標準入力で流す方式になりました。旧記事の手順は動きません。 - 費用の中心はモデル料金:公式ベンチマークでは同じタスクでも1件0.06ドルから8.9ドルまで開きます。Cloudのブラウザは1時間0.02ドルです。
- 選び分け:手順が決まっている自動化はPlaywright、既存のAIエージェントに操作手段を足すだけならPlaywright MCPかBrowser UseのCLI、ゴールだけ渡して手順を任せたいときにBrowser Useのライブラリが向きます。
Browser Useの仕組みと3つの使い方
操作できる要素の一覧をLLMに渡して次の一手を決める仕組み
Browser Useは、表示中のページからボタン・入力欄・リンクなど操作できる要素を抜き出して番号付きの一覧にし、LLMに「次にどの要素をどう操作するか」を選ばせます。既定では use_vision=True で、要素の一覧に加えてスクリーンショットも送ります。操作はChrome DevTools Protocol(CDP)経由で実行し、ページが変わるたびに「観測→判断→操作」を繰り返して、LLMが完了と判断するか上限の max_steps(既定500)に達するまで続けます。
人がCSSセレクタを書くPlaywrightやSeleniumと違い、ページの構造が変わってもLLMが目的の要素を選び直せます。その代わり手順は毎回同じとは限らず、1ステップごとにモデル料金がかかります。
Pythonライブラリ・CLI・Cloud APIの選び分け
公式リポジトリのREADMEは、使い方を次の3経路に分けています。CLIとライブラリはローカルのブラウザとクラウドのブラウザのどちらも操作できます。
| 経路 | エージェントを動かす場所 | 向く用途 |
|---|---|---|
| Pythonライブラリ | 自分のコード | 定期実行・自社システムへの組み込み |
| CLI | Claude Code・Codex・Cursor など | 対話中の単発のブラウザ作業 |
| Cloud API | Browser Use 側 | 大量並列・ブラウザ基盤ごと外部化 |
開発元はチューリッヒとサンフランシスコを拠点にする Magnus Müller 氏と Gregor Žunič 氏で、2024年に公開されました。AnthropicのSDKからBrowser Useのブラウザ操作31種類とBashを呼べる「Claude向けツールセット」も公式に提供されています。TypeScriptでエージェントを書きたい場合は、同じ開発元の Browser Use Pi(Piというエージェント基盤上のTypeScript版)が別リポジトリで公開されています。
Pythonライブラリの導入とエージェントの初回実行
動作要件:Python 3.11以上とChromeの自動検出
PyPIの登録情報では、0.13.14 の対応範囲は Python 3.11以上4.0未満です。ブラウザは、インストール済みのChrome・Chromium・Edge・Braveを既定の場所から探して使います。どれも見つからないときは、初回起動時に uvx playwright install chromium を自動で実行してChromiumを取得します(Linuxでは依存ライブラリも同時に入れます)。そのため旧版のように playwright install を手で叩く必要はありませんが、自動取得は uv の uvx に頼るので、uvを入れておくのが確実です。事前に入れておきたい場合は browser-use install で同じ処理を明示的に実行できます。
WindowsでもChromeの既定パス(Program Files・LOCALAPPDATA)を探す実装があり、ネイティブで動きます。ただし前述のClaude向けツールセットのうちBash実行の部分はWindowsに対応しておらず、READMEはWSLを使うよう案内しています。
インストールとAPIキーの設定
# 新規プロジェクトなら先に uv init --python 3.12
uv add browser-use
# pip の場合: pip install browser-use
# この記事の検証版に固定する場合: uv add "browser-use==0.13.14"
# プロジェクト直下の .env(使うものだけ書く)
OPENAI_API_KEY=your-key
# ANTHROPIC_API_KEY=your-key
# GOOGLE_API_KEY=your-key
# BROWSER_USE_API_KEY=your-key # BU2モデルかクラウドのブラウザを使う場合
Agentの最小コードと初回実行
READMEのクイックスタートと同じ構成です。task に日本語で指示を書き、llm に使うモデルを渡します。
import asyncio
from browser_use import Agent, ChatBrowserUse, ChatOpenAI
from dotenv import load_dotenv
load_dotenv()
async def main():
agent = Agent(
task="GitHubで browser-use リポジトリのスター数を調べて",
llm=ChatOpenAI(model="gpt-5.6-luna", reasoning_effort="xhigh"),
# BU2を使う場合は上の行を消して次の行を有効化(BROWSER_USE_API_KEYが必要)
# llm=ChatBrowserUse(model="bu-2-0"),
)
history = await agent.run(max_steps=30) # 既定は500ステップ
print(history.final_result())
if __name__ == "__main__":
asyncio.run(main())
uv run agent.py で実行すると、ブラウザが開いてGitHubを検索し、読み取ったスター数を表示します。max_steps は既定の500のままだと迷走したときの料金がかさむので、タスクの規模に合わせて小さく指定してください。成功したかは history.is_successful()、途中のエラーは history.errors() で確認できます。
LLMモデルの選び方と1タスクあたりの費用
指定できるモデルとクラス
モデルは llm= に渡すクラスを差し替えるだけで変わります。0.13.14 は ChatOpenAI・ChatAnthropic・ChatGoogle・ChatOllama・ChatAzureOpenAI・ChatDeepSeek・ChatOpenRouter など17のモデル用クラスを公開しています。
| 使いたいモデル | 指定方法 | 必要なキー |
|---|---|---|
| BU2(公式の推奨) | ChatBrowserUse(model="bu-2-0") |
BROWSER_USE_API_KEY |
| BU2 mini(プレビュー) | ChatBrowserUse(model="bu-2-0-mini-preview") |
BROWSER_USE_API_KEY |
| Claude・GPT・Gemini(公式経由) | ChatBrowserUse(model="anthropic/claude-sonnet-4-6") |
BROWSER_USE_API_KEY |
| 各社の直接契約 | ChatOpenAI・ChatAnthropic・ChatGoogle |
各社のAPIキー |
| ローカルLLM | ChatOllama(model="qwen3:8b") |
不要 |
| bu-30b-a3b-preview | vLLMで自前ホストし ChatOpenAI で接続 |
自前の推論環境 |
オープンウェイトの browser-use/bu-30b-a3b-preview は、0.13.14 のソースのコメントで「Browser Use Cloudでは提供しない・自前ホスト専用」と明記されています。ChatBrowserUse に渡しても動かないので注意してください。
公式ベンチマークで見るモデル別の品質と1タスク費用
公式の料金ページは、難度の高いブラウザ作業60件(BU_Bench_v2)でのモデル別の品質スコアと1タスクの費用を公開しています(2026年10月29日取得)。過去の測定結果で、計測時のビルドが設定ごとに異なると公式が断っているため、厳密な同条件比較ではなく目安として読んでください。
| モデル・設定 | 品質(100点満点) | 1タスクの費用 | 1タスクの時間 |
|---|---|---|---|
| GPT-6 Astra・medium | 80.6 | 8.867ドル | 31.7分 |
| GPT-6 Sol・medium | 66.8 | 1.203ドル | 13.5分 |
| Claude Opus 5.5 | 59.4 | 4.215ドル | 34.2分 |
| GPT-6 Luna・high | 53.9 | 0.155ドル | 25.9分 |
| GPT-5.6 Luna・xhigh | 41.2 | 0.358ドル | 22.2分 |
| GPT-5.6 Luna・default | 16.1 | 0.056ドル | 5.3分 |
同じGPT-5.6 Lunaでも、推論の強さを既定からxhighに上げるとスコアが16.1から41.2に上がります。READMEのサンプルも reasoning_effort="xhigh" を指定しています。最初は GPT-6 Luna・high や GPT-5.6 Luna・xhigh のような1件約0.15〜0.36ドルの設定で試し、失敗する作業だけ上位モデルに切り替えるのが費用を抑える順番です。なお、このスコアはタスクの成功率ではなく評価項目の達成度で、費用は記録できた分だけの下限値であり、Cloudの請求額とも別物だと公式が注記しています。
ローカルLLM(Ollama)で動かすときの注意
ChatOllama を使えばAPIキーも従量料金も不要です。上の表のとおり難しい作業では商用の上位モデルでも得点が伸びないため、READMEの「簡単なタスクなら小さなモデルでも高い成功率が出る」という記述に沿って、決まったサイトでの検索・転記のような単純な作業から試すのが現実的です。スクリーンショットも送るので、画像入力に対応したモデルを選ぶか use_vision=False を指定してください。
CLI 3.0でClaude Code・Codexにブラウザを操作させる
旧サブコマンドの廃止とPythonを流す新しい書き方
0.13系のCLIは3.0になり、書き方が大きく変わりました。browser-use open や browser-use state などのサブコマンドは廃止され、実行すると「The browser-use CLI changed in 3.0」というメッセージを返して終了します。新しいCLIは、Pythonのコードを標準入力で受け取って、裏で常駐するブラウザセッションの中で実行します。ローカルで使う場合は、起動中の自分のChromeにそのまま接続します。
browser-use <<'PY'
new_tab("https://news.ycombinator.com")
print(page_info())
PY
new_tab・page_info・click_at_xy・fill_input・capture_screenshot などの関数はあらかじめ読み込まれています。コーディングエージェントに覚えさせるには browser-use skill install でスキルとして登録します。動かないときは browser-use --doctor でインストール・常駐プロセス・ブラウザの状態を点検でき、macOSでChromeのリモートデバッグ許可が出る場合は browser-use mac-approve で承認します。
旧コマンドから新しい書き方への置き換え
2.0時代の手順書やブログ記事のコマンドは、次のように書き換えます(0.13.14のCLIが表示する移行メッセージから抜粋)。
| 2.0のコマンド | 3.0での書き方 |
|---|---|
open |
new_tab("https://example.com") |
state |
print(page_info()) |
screenshot |
print(capture_screenshot()) |
eval |
print(js("document.title")) |
cloud |
browser-use auth login のあと start_remote_daemon("名前") |
mcp |
browser-use --mcp |
--cdp-url |
環境変数 BU_CDP_URL |
--headed |
不要(常に表示中の実Chromeを操作) |
CLIは普段使っているChromeのログイン状態をそのまま使えるのが利点ですが、裏を返せば、エージェントが誤ってメールや管理画面を操作できる状態でもあります。業務用のアカウントでログインしたままのChromeには接続させず、権限を絞った専用アカウントとプロファイルを用意してください。指示文で操作先を限定するのはあくまで依頼であり、技術的な遮断にはなりません。
MCPサーバーの起動とクライアント設定(browser-use –mcp)
--mcp を付けて起動すると、Browser UseがMCP(Model Context Protocol)サーバーとして動き、Claude DesktopなどのMCPクライアントからブラウザ操作を呼べます。0.13.14 のソースにある設定例は次のとおりです。
{
"mcpServers": {
"browser-use": {
"command": "uvx",
"args": ["browser-use[cli]", "--mcp"],
"env": { "OPENAI_API_KEY": "your-key" }
}
}
}
公開されるツールは browser_navigate・browser_click・browser_type・browser_get_state・browser_screenshot・browser_scroll・タブ操作などです。ページ内容をLLMで要約する browser_extract_content と、うまくいかない操作をBrowser Useのエージェントにやり直させる retry_with_browser_use_agent は OPENAI_API_KEY が無いとエラーを返します。
Pythonライブラリで業務に組み込む:構造化出力・ログイン・再実行
Pydanticによる結果の型指定(output_model_schema)
取得結果を後続の処理に渡すなら、文字列ではなく型で受け取ります。output_model_schema にPydanticのモデルを渡すと、最終結果がそのスキーマに沿って返り、history.structured_output で取り出せます。
from pydantic import BaseModel
from browser_use import Agent, ChatBrowserUse
class Repo(BaseModel):
name: str
stars: int
class Repos(BaseModel):
items: list[Repo]
agent = Agent(
task="GitHubのトレンドからPythonの上位3リポジトリの名前とスター数を取得して",
llm=ChatBrowserUse(),
output_model_schema=Repos,
)
history = await agent.run(max_steps=20)
repos = history.structured_output # Repos 型。失敗時は None(非同期関数の中で実行)
独自の関数(社内APIの呼び出しやファイル保存など)をエージェントに使わせたい場合は、Tools() に @tools.action(description=...) で登録して Agent(tools=tools) に渡します。
ログイン情報の置換と接続先の制限(sensitive_data と allowed_domains)
ログインが要る作業では、パスワードをタスク文に書かず sensitive_data に置きます。LLMに送るテキストでは x_pass のような置き換え名に伏せられ、入力の瞬間に実際の値へ差し替わります。ただし伏せるのはテキストだけで、スクリーンショットの画像はマスクされません。入力後の画面に表示される値(ユーザー名など)は画像としてモデルに届きうる点に注意してください。
from browser_use import Agent, Browser, ChatBrowserUse
browser = Browser(allowed_domains=["https://*.example.com"])
agent = Agent(
task="example.com に x_user と x_pass でログインして請求書一覧を開いて",
llm=ChatBrowserUse(),
browser=browser,
sensitive_data={
"https://*.example.com": {"x_user": "[email protected]", "x_pass": "your-password"},
},
)
allowed_domains を指定せずに sensitive_data を渡すと、0.13.14 は「悪意あるサイトのプロンプトインジェクションで秘密情報が漏れうる」という警告を出します。ドメインごとに値を分け、移動できるドメインも絞るのが前提です。普段のChromeのログイン状態を使いたい場合は Browser.from_system_chrome() でプロファイルを再利用できます。
操作履歴の保存と再生(save_history と load_and_rerun)
毎回同じフォームに違う値を入れるような定型作業は、1回目だけLLMに解かせ、2回目以降は記録したクリックと入力を再生できます。再生中はステップごとのモデル呼び出しが起きないので、料金と時間を抑えられます。次のコードは非同期関数の中に置く断片で、importと .env のAPIキーは前の例と同じ前提です。
agent = Agent(task="https://example.com/billing で山田太郎([email protected])の請求書の控えを依頼して", llm=ChatBrowserUse())
await agent.run()
agent.save_history("invoice_run.json")
print(agent.detect_variables()) # 実際の変数名はフォームの項目から決まる
# 2回目以降: detect_variables() が出した名前をキーにして値を差し替える
results = await Agent(task="", llm=ChatBrowserUse()).load_and_rerun(
"invoice_run.json",
variables={"name": "佐藤花子", "email": "[email protected]"},
skip_failures=False,
)
variables のキーは detect_variables() が表示した名前に合わせます。知らない名前は警告付きで無視され、1回目に記録した値がそのまま入力されるため、請求書の依頼なら前回の人の情報で再送信してしまいます。このほかREADMEは次の3点を注意事項に挙げています。抽出ステップと最後の要約ではモデルを呼ぶこと。ページの構造が変わっていると、照合できない最初のステップで RuntimeError になり、それまでのステップは実行済みであること。保存ファイルにはページのスナップショットが残るため、秘密情報が含まれうること。フォーム送信のような二重実行が困る作業では、失敗時に送信済みかを確かめてから再実行してください。
Browser Use Cloudの料金と無料枠
ライブラリ本体はMITライセンスで無料です。お金がかかるのはモデルの利用料と、使う場合のBrowser Use Cloudです。Cloudは月額のサブスクリプションがない従量課金で、2026年10月29日時点の料金ページの内容は次のとおりです。
| 項目 | 料金 |
|---|---|
| クラウドのブラウザ | 1時間0.02ドル(1分単位で切り上げ・最低1分) |
| 住宅用プロキシ(既定で有効) | 1GBあたり5ドル |
| 直接接続・自前プロキシの通信 | 1GBあたり0.20ドル |
| Webエージェント(Cloud API) | モデル料金+20%、ブラウザ時間と通信量は別 |
| 無料枠 | Google・GitHub・Microsoftでの新規登録で1人1回1ドル分 |
| クレジットの有効期限 | なし |
Cloud経由のモデル料金は手数料込みで、100万トークンあたり GPT-5.6 Luna が入力0.24ドル・出力1.44ドル、Claude Sonnet 5 が入力2.40ドル・出力12.00ドルです。ライブラリから使う場合は、Browser(use_cloud=True) を指定して BROWSER_USE_API_KEY を設定するだけで、同じコードのままクラウドのブラウザに切り替わります。READMEによると、クラウドのブラウザにはボット検知を回避しやすくするステルス機能・住宅用プロキシ・CAPTCHA対策・操作中の画面を見るURLが付きます。ただし公式も「すべてのCAPTCHAを回避・解決できる保証はない」と書いています。
並列数を増やしたい収集や、Docker・CIなどChromeを入れにくい環境では、ブラウザだけCloudに出してエージェントのコードは手元に残す構成が扱いやすいでしょう。
Playwright MCP・Stagehand・Seleniumとの違いと選び方
ブラウザ操作の自動化には、手順を人が書く方式とAIに決めさせる方式があり、Browser Useは後者の中でもゴールだけを渡す側に寄っています。各方式の全体像はBrowser Automationとは?ブラウザ操作を自動化する4つの方式と選び方で整理しています。
| ツール | 手順を決めるのは | 向く場面 |
|---|---|---|
| Browser Use | LLM(ゴールだけ渡す) | サイトごとに手順が違う収集・申請 |
| Playwright MCP | 呼び出し側のAIエージェント | 既存のエージェントに操作手段を足す |
| Stagehand | 人のコード+自然言語の操作(agentで自律実行も可) | 決まった流れの一部だけAIに任せる |
| Playwright・Selenium | 人(セレクタで指定) | E2Eテスト・手順が固定の定型処理 |
| Computer Use系 | LLM(画面画像と座標) | ブラウザ以外のアプリも含む操作 |
Browser Useを選ぶべきなのは、対象サイトが多くて手順を1つずつ書いていられない作業や、サイトの構造がよく変わる作業です。逆に、手順が決まっていてセレクタが安定しているE2Eテストには向きません。毎回モデル料金がかかり、失敗の再現も難しくなるためです。その場合はPlaywright(プレイライト)とは?仕組み・できること・Seleniumとの違いを解説で扱っている素のPlaywrightが適します。
Claude CodeやCursorにブラウザを触らせたいだけなら、Browser UseのCLIかPlaywright MCPが候補です。Playwright MCPはページのアクセシビリティツリーを要素の参照番号付きで返し、手順の判断を呼び出し側のエージェントに任せる設計です。流れの大半を自分のコードで書き、迷う箇所だけ自然言語で指示したいならStagehandとは|AIブラウザ自動化の使い方とPlaywrightとの違いが合います。なお、同じ発想のPython製OSSであるsentientは更新が止まっており、新規に選ぶ理由は乏しいでしょう。ブラウザ操作を含む業務フローを社内に組み込む設計から相談したい場合は、RPA×AIエージェント連携(インテリジェントオートメーション)も参考にしてください。
本番運用で事故を防ぐための設定
プロンプトインジェクションと不可逆な操作
エージェントはページ上の文章を読んで判断するため、悪意あるページに「これまでの指示を無視して〇〇せよ」と書かれていると従ってしまうおそれがあります。allowed_domains で移動先を限り、送金・退会・削除・購入のような取り消せない操作は自動実行させずに人が確認する流れにしてください。ブラウザ操作系ツールに共通する攻撃の型はPlaywright MCPのセキュリティ|危険性とCVE-2025-9611対策で詳しく扱っています。サイト側が操作をツールとして公開して呼び出してもらう方式を検討するなら、WebMCPも比較対象になります。
費用の上限とテレメトリ
agent.run() の max_steps は既定で500です。ループに入ったときの料金を抑えるため、本番では作業ごとに上限を決めて渡します。また、0.13.14 は匿名の利用統計を既定で送信します。社内ルールで外部送信を止めたい場合は環境変数 ANONYMIZED_TELEMETRY=false を設定してください。Webサイトの利用規約でスクレイピングや自動アクセスを禁じている場合は、技術的に操作できても実行しないのが原則です。
よくある質問
Browser Useは無料で使えますか?
ライブラリはMITライセンスで無料です。かかるのは使うモデルの利用料で、Ollamaのローカルモデルならそれも不要です。Browser Use Cloudは従量課金で、クラウドのブラウザが1時間0.02ドル、新規登録で1ドル分の無料クレジットが付きます。
Playwrightを別にインストールする必要はありますか?
手動のインストールは不要です。0.13.14 はChrome・Chromium・Edge・Braveを自動で探し、見つからなければ初回に uvx playwright install chromium を自動で実行します。事前に入れておきたいときは browser-use install を使います。
WindowsでもBrowser Useは動きますか?
動きます。Windowsの既定のインストール先にあるChromeを検出します。Claude向けツールセットのBash実行だけはWindowsに対応しておらず、WSLが必要です。
browser-use open などのCLIコマンドが動かないのはなぜですか?
CLIが3.0になり、open・state・screenshot などのサブコマンドが廃止されたためです。browser-use にPythonのコードを標準入力で流し、new_tab() や page_info() を呼ぶ書き方に置き換えてください。
Browser UseとPlaywright MCPはどちらを使うべきですか?
すでにClaude CodeやCursorなどのエージェントがあり、そこへブラウザ操作を足すだけならPlaywright MCPかBrowser UseのCLIです。自分のPythonコードから、ゴールだけ渡して手順ごと任せる処理を繰り返し動かすならBrowser Useのライブラリが向きます。