ソフトウェアエンジニア必見!AI搭載ブラウザ自動化「Stagehand」徹底解説
「browserbase/stagehand」は、AI(人工知能)と既存のブラウザ自動化ツール(Selenium、Playwrightなど)の強みを組み合わせた、まさに"goated"とも言えるフレームワークです。これまでのツールが抱えていた「UI変更に弱い」「コードが複雑になりがち」といった課題を解決し、より堅牢で、より人間らしい操作が可能なブラウザ自動化を実現します。
堅牢性の向上 従来のツールでは、ウェブサイトのUIが少し変わるだけで自動化スクリプトが動かなくなってしまうことが多々ありました。StagehandはAIを活用することで、こうしたDOMの変更に強く、"自己修復"するような自動化を可能にします。これにより、メンテナンスの手間が大幅に削減されます。
自然言語での操作とコードの融合 Stagehandは、AIエージェントを使って自然言語でブラウザを操作できる一方で、PlaywrightのAPIもそのまま利用できます。これにより、ウェブサイトの構造が予測できる部分はコードで正確に記述し、AIに探索させたい部分は自然言語で指示するといった、柔軟な開発が可能になります。
データ抽出の進化
extractメソッドを使うと、自然言語で「このページから〇〇を抽出して」と指示するだけで、必要なデータを構造化された形式(Zodスキーマと連携可能)で取得できます。これはウェブスクレイピングの概念を大きく変えるでしょう。
AIエージェントの活用
stagehand.agent()を使用することで、OpenAIやAnthropicなどの最先端のコンピュータ使用モデルを簡単に統合し、複雑なマルチステップのタスクを自動実行させることが可能です。
開発体験の向上 Playwrightの上に構築されているため、多くの開発者にとって馴染みやすいAPIを提供します。また、アクションのプレビューやキャッシュ機能、詳細なロギング機能なども備わっており、デバッグや開発効率が向上します。
StagehandはJavaScript/TypeScriptとPythonの両方をサポートしています。
TypeScript/Node.jsの場合(推奨)
新しいプロジェクトを作成する場合、以下のコマンドが非常に便利です。
npx create-browser-app
既存のプロジェクトに導入する場合は、npm、pnpm、またはyarnでパッケージを追加します。
npm install @browserbasehq/stagehand
# または
pnpm add @browserbasehq/stagehand
# または
yarn add @browserbasehq/stagehand
Pythonの場合
pipを使ってインストールします。
pip install stagehand-py
環境変数の設定が必要です。.envファイルを作成するか、環境変数として設定します。
export BROWSERBASE_API_KEY="your-api-key"
export BROWSERBASE_PROJECT_ID="your-project-id"
export MODEL_API_KEY="your-openai-api-key" # または利用するモデルのAPIキー
ここではPythonの例を挙げますが、JavaScript/TypeScriptでも同様のロジックで利用できます。
簡単なブラウザ操作とデータ抽出の例
import os
import asyncio
from stagehand import Stagehand, StagehandConfig
from dotenv import load_dotenv
from pydantic import BaseModel # ZodスキーマのPython版に相当
load_dotenv()
# データ抽出用のスキーマを定義
class Book(BaseModel):
title: str
price: str
image: str
inStock: str
link: str
class ScrapedBooks(BaseModel):
books: list[Book]
async def main():
config = StagehandConfig(
env="BROWSERBASE", # ローカルで実行する場合は "LOCAL"
api_key=os.getenv("BROWSERBASE_API_KEY"),
project_id=os.getenv("BROWSERBASE_PROJECT_ID"),
model_name="gpt-4o", # 使用するAIモデルを指定
model_client_options={"apiKey": os.getenv("MODEL_API_KEY")}
)
stagehand = Stagehand(config)
try:
await stagehand.init()
page = stagehand.page
# ウェブサイトに移動
await page.goto("https://books.toscrape.com/")
# 自然言語とスキーマを使ってデータを抽出
scrape_result = await page.extract(
instruction="Extract the books from the page",
schema=ScrapedBooks.model_json_schema() # PydanticスキーマをJSONスキーマに変換して渡す
)
print(scrape_result.books)
finally:
await stagehand.close()
if __name__ == "__main__":
asyncio.run(main())
このコードでは、page.goto()で指定のURLに移動し、page.extract()を使ってウェブページから書籍情報を自然言語の指示と定義したスキーマに基づいて抽出しています。これにより、要素セレクタの変更に左右されにくい、よりインテリジェントなデータ抽出が実現できます。
Stagehandは、ブラウザ自動化の可能性を大きく広げる画期的なフレームワークです。ぜひあなたのプロジェクトに導入し、そのパワーを体験してみてください!
Stagehand 公式ドキュメント
What is Stagehand? - Stagehand
Stagehand GitHubリポジトリ
browserbase/stagehand: The AI Browser Automation Framework