AI News HubLIVE
サイト内リライト4 分で読了

Pythonでブラウザを使用するAIエージェントを構築する

この記事では、Playwright、browser-use、LangGraphを使用して、実際のWebサイトを閲覧・操作できるAIエージェントをPythonで構築する方法を解説します。トピックは、PlaywrightがSeleniumよりも優れている理由(30~50%高速、永続的WebSocket、内蔵自動待機、リアルなイベント)、環境設定手順、動的ページのスクレイピング、複数ステップのフォーム入力、アンチボット検出対策、セッション永続化、Dockerへのデプロイです。コード例を通じて、Webサイトをナビゲートし、フォームに記入し、構造化データを抽出し、LLMで意思決定を行う実用的なブラウザエージェントを作成します。

ソースMachine Learning Mastery著者: Shittu Olumide

Pythonでブラウザを使用するAIエージェントを構築する

ほとんどのAIエージェントのチュートリアルはAPIから始まります。OpenWeatherの呼び出し方、Stripeエンドポイントへのアクセス方法、GitHubからのデータ取得方法を示します。それは良い出発点ですが、実際に何かを構築しようとすると、必要なタスクにAPIが存在しないことに気づきます。

人間が毎日ブラウザで行っていること——政府のフォームへの記入、競合他社の価格調査、JavaScriptレンダリングの背後でデータを保護しているサイトからの研究資料の抽出、OAuthを聞いたこともないポータルへのログイン——を考えてみてください。インターネット上には約11億のWebサイトがありますが、そのうちごく一部だけが公開APIを提供しており、残りはブラウザでのみ通信できます。

API呼び出しのみに制限されたエージェントは、人間の作業の約5%しか処理できません。そのエージェントにブラウザを与えれば、カバレッジはほぼすべてに近づきます。これがこの記事で解決するギャップです。

世界のAIエージェント市場は2026年に109.1億ドル、2030年には503.1億ドルに達すると予測されており、ブラウザ対応エージェントがその成長の中心にあります。企業の27.7%がすでにプロダクションでブラウザベースのエージェントを稼働させており、2年前にはほとんどゼロだったことから、ツールは急速に成熟し、パターンは適切に教えるのに十分に確立されています。

PlaywrightがSeleniumでない理由

5年前にブラウザ自動化を構築したなら、Seleniumを使っていたでしょう。Seleniumは今でも広く使われ、動作し、なくなることはありません。しかし、2026年の新しいプロジェクトではPlaywrightがデフォルトです。その理由は理論ではなく実用的です。

Seleniumは個々のHTTPリクエストをWebDriverに送信してブラウザと通信します。クリック、タイプ、スクロールのすべてのアクションが個別のリクエストです。Playwrightはセッション全体に永続的なWebSocket接続を使用します。コマンドはそのチャネルを通じて流れ、アクションごとの往復コストはありません。独立したベンチマークでは、PlaywrightはテストスイートレベルでSeleniumより30~50%高速で、アクションあたり平均約290ミリ秒(Seleniumは約536ミリ秒)です。何百ものアクションを実行するブラウザエージェントでは、その差は累積します。

Playwrightは独自のブラウザバイナリもバンドルしています。インストール時に、Playwrightバージョンで動作が保証されたChromium、Firefox、WebKitの事前設定バージョンが入手できます。ドライバのバージョン不一致やChromeの更新によるCIパイプラインの破損はありません。また、要素をクリックする前に自動待機が組み込まれており、要素が可視、有効、アニメーション中でないことを確認するため、time.sleep(2)と書いて願う必要はありません。

AIエージェントにとって特に重要なのは、Playwrightが実際のマウスとキーボードのイベントを発生させ、人間のブラウザ操作を模倣することです。自動化を検出するように設計されたサイトは合成DOMクリックを探しますが、Playwrightの相互作用モデルは本物の人間の入力と区別が難しくなっています。

さらに上位のレイヤーとしてbrowser-useライブラリがあります。browser-useはLLMに動作するブラウザを提供するPythonライブラリです。内部ではPlaywrightを使用してブラウザを駆動しますが、LLMがページの状態を読み取り、クリック、入力、抽出を決定するため、CSSセレクターは不要です。タスクを平易な英語で与えるだけで、残りは自動で処理します。この記事では、生のPlaywrightとbrowser-useの両方をカバーします。なぜなら、それらは異なるニーズを満たすからです。Playwrightは正確で予測可能な制御が必要な場合に、browser-useはエージェントにナビゲーションの決定を自律的に任せたい場合に適しています。

環境設定

必要なものは、Python 3.10以上、OpenAI APIキー、そして約5分です。

  1. 仮想環境の作成: python -m venv browser_agent_env、アクティベート(Linux/macOS: source browser_agent_env/bin/activate、Windows: browser_agent_env\Scripts\activate)。
  2. 依存関係のインストール: pip install playwright browser-use langchain langchain-openai langgraph langchain-community python-dotenv
  3. ブラウザバイナリのインストール: playwright install chromium(またはplaywright installで3つすべて)。多くの人がこの手順を忘れます。
  4. APIキーの保存: プロジェクトディレクトリに.envファイルを作成し、OPENAI_API_KEY=your_api_key_hereと記述。直ちに.gitignoreに追加します。
  5. 動作確認: example.comに移動し、見出しを読み取り、スクリーンショットを保存する簡単なスクリプトを実行します。成功すれば環境は正しく設定されています。

Webナビゲーションとスクレイピング

requests+BeautifulSoupではなくPlaywrightが必要な理由は、JavaScriptレンダリングです。最新のWebサイトはHTMLの骨格を配信し、ページ読み込み後にJavaScriptで実際のコンテンツを動的に構築します(React、Vue、Angular、Next.js)。単純なHTTPリクエストでは骨格しか取得できませんが、Playwrightは実際のブラウザを実行するため、人間が見るのと同じ、すべてのJavaScriptが実行された後のページを表示します。

ターゲットはbooks.toscrape.comで、練習用に作られた合法的なスクレイピングサンドボックスです。結果をページ分割し、動的なクラス名で評価を表示し、実際のeコマース製品ページの構造をよく模倣しています。

wait_for_selector()が重要な呼び出しです。固定時間スリープする代わりに、DOMを監視し、対象要素が表示された瞬間に処理を進めるか、タイムアウト内に表示されなければTimeoutErrorを発生させます。これは、空のページから静かにデータを抽出するよりも、明示的に迅速に失敗する正しい動作です。

評価の抽出はクラス名(例:star-rating Three)からテキスト値を取得します。これが動的ページを扱う際の典型的なパターンです。

LLMとの統合:ブラウザエージェントのワークフロー

ブラウザ操作をLLMに接続するには、browser-useライブラリとLangGraphを使用してエージェントワークフローを構築します。基本的な考え方は、LLM(例:GPT-4)が現在のページの内容を読み取り、次のアクション(クリック、入力、抽出、ナビゲーション)を決定し、それを実行して結果を観察し、タスクが完了するまでループするというものです。

高度なユースケースでは、アンチボット検出の処理(よりリアルなユーザーエージェントの使用、ビューポートサイズの調整、ランダムな遅延)、セッション状態の管理(ログイン状態の維持)、再現性と分離を確保するためのDockerコンテナへのデプロイが必要です。

まとめ

この記事では、ブラウザを使用するAIエージェントをゼロから構築しました。Playwrightの基本から、LangGraphやbrowser-useとの統合、実際のデプロイメントの考慮事項までをカバーしました。フォームの自動入力、動的データのスクレイピング、自律的にWebを閲覧するAIアシスタントの構築など、これらのパターンはすべてに適用できます。ブラウザエージェントはAIの能力を、APIではカバーできない95%のWebサイトタスクに拡張します。