🍜

stagehandで吉村家の住所を取得

2024/12/29に公開

概要

https://github.com/browserbase/stagehand
stagehandはざっくりいうとplaywrightを自然言語で操作するためのライブラリ。

食べログのトップページから検索フォームを辿って、赤枠部分の住所が取れるか検証してみた。

https://tabelog.com/kanagawa/A1401/A140102/14090328/

スクリプト

import { Stagehand } from "@browserbasehq/stagehand";
import { z } from "zod";

// 初期化
const stagehand = new Stagehand({
  env: "LOCAL",
});

// 食べログにアクセス
await stagehand.init();
const page = stagehand.page;
await page.goto("https://tabelog.com/");

// 吉村家を検索
await page.act({ action: "キーワード欄に吉村家と入力" });
await page.act({ action: "検索ボタンを押す" });

// 吉村家のページに遷移
await page.act({ action: "吉村家を探して詳細ページへのリンクを押す" });

// 詳細ページから住所を取得
const contributor = await page.extract({
  instruction: "住所を抜き出す",
  schema: z.object({
    address: z.string(),
  }),
});
await stagehand.close();

console.log(`吉村家の住所: ${contributor.address}`);

結果

取れた!

吉村家の住所: 神奈川県横浜市西区岡野1-6-4

このスクリプトにかかったgpt4oのコストは以下。
ほぼinput tokenに対してのコスト。
(htmlを全て送信しているため大きくなりがち?)
回数を重ねるとそれなりにかかるなぁと言う印象。

$0.13

実行時間は以下。
チューニングすれば早くはできそうだが、デフォルトだと時間がかかる。

2分7秒

感想

ブラウザが開くので実際どんな挙動をしているか確認できる。
ページ遷移する度にページを全てスクロールし、全情報にアクセスできるようにしているっぽい。

browser-useに比べて汎用性は低いが、タスクが具体的になる分精度は高くなりそう。

Discussion