ブラウザツール
adk-browser crate は、AIエージェントがウェブページとやり取りできるようにする46の包括的なブラウザ自動化ツールを提供します。WebDriverプロトコル (Selenium) 上に構築されており、任意のWebDriver互換ブラウザで動作します。
概要
ブラウザツールを使用すると、エージェントは以下のことができます。
- ウェブページをナビゲートし、ブラウザ履歴を管理する
- テキスト、リンク、画像、構造化データを抽出する
- フォームに入力し、ページ要素とやり取りする
- スクリーンショットを撮り、PDFを生成する
- 高度な自動化のためにJavaScriptを実行する
- Cookie、フレーム、複数のウィンドウを管理する
クイックスタート
Cargo.tomlに追加します。
[dependencies]
adk-browser = "0.2.0"
adk-agent = "0.2.0"
adk-model = "0.2.0"
前提条件
WebDriverサーバーを起動します。
# Using Docker (recommended)
docker run -d -p 4444:4444 -p 7900:7900 --shm-size=2g selenium/standalone-chrome:latest
# Or use ChromeDriver directly
chromedriver --port=4444
基本的な使用方法
use adk_browser::{BrowserSession, BrowserToolset, BrowserConfig};
use adk_agent::LlmAgentBuilder;
use adk_model::GeminiModel;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// ブラウザセッションを設定
let config = BrowserConfig::new()
.webdriver_url("http://localhost:4444")
.headless(true)
.viewport(1920, 1080);
// ブラウザセッションを作成して開始
let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;
// 46個すべてのツールを含むツールセットを作成
let toolset = BrowserToolset::new(browser.clone());
let tools = toolset.all_tools();
// ブラウザツールでAIエージェントを作成
let api_key = std::env::var("GOOGLE_API_KEY")?;
let model = Arc::new(GeminiModel::new(&api_key, "gemini-2.0-flash")?);
let mut builder = LlmAgentBuilder::new("web_agent")
.model(model)
.instruction("You are a web automation assistant. Use browser tools to help users.");
for tool in tools {
builder = builder.tool(tool);
}
let agent = builder.build()?;
// 終了時のクリーンアップ
browser.stop().await?;
Ok(())
}
フィルタリングされたツール
エージェントが必要とするツールのみを選択します。
let toolset = BrowserToolset::new(browser)
.with_navigation(true) // navigate、back、forward、refresh
.with_extraction(true) // extract_text、extract_attribute、extract_links、page_info、page_source
.with_interaction(true) // click、double_click、type、clear、select
.with_wait(true) // wait_for_element、wait、wait_for_page_load、wait_for_text
.with_screenshot(true) // screenshot
.with_js(true) // evaluate_js、scroll、hover、handle_alert
.with_cookies(false) // Cookieツールを無効にする
.with_frames(false) // フレームツールを無効にする
.with_windows(false) // ウィンドウツールを無効にする
.with_actions(false); // 高度なアクションを無効にする
let tools = toolset.all_tools();
利用可能なツール (合計46個)
ナビゲーション (4ツール)
| ツール | 説明 |
|---|
browser_navigate | URLに移動 |
browser_back | 履歴を戻る |
browser_forward | 履歴を進む |
browser_refresh | 現在のページを更新 |
抽出 (5ツール)
| ツール | 説明 |
|---|
browser_extract_text | 要素から表示されているテキストを抽出 |
browser_extract_attribute | 要素から属性値を取得 |
browser_extract_links | ページ上のすべてのリンクを抽出 |
browser_page_info | 現在のURLとタイトルを取得 |
browser_page_source | HTMLソースを取得 |
インタラクション (5ツール)
| ツール | 説明 |
|---|
browser_click | 要素をクリック |
browser_double_click | 要素をダブルクリック |
browser_type | 要素にテキストを入力 |
browser_clear | 入力フィールドをクリア |
browser_select | ドロップダウンオプションを選択 |
待機 (4ツール)
| ツール | 説明 |
|---|
browser_wait_for_element | 要素が表示されるまで待機 |
browser_wait | 指定した時間待機 |
browser_wait_for_page_load | ページがロードされるまで待機 |
browser_wait_for_text | テキストが表示されるまで待機 |
スクリーンショット (1ツール)
| ツール | 説明 |
|---|
browser_screenshot | ページまたは要素のスクリーンショットをキャプチャ |
JavaScript (4ツール)
| ツール | 説明 |
|---|
browser_evaluate_js | JavaScriptコードを実行 |
browser_scroll | ページをスクロール |
browser_hover | 要素にマウスオーバー |
browser_handle_alert | JavaScriptアラートを処理 |
クッキー (5ツール)
| ツール | 説明 |
|---|
browser_get_cookies | すべてのクッキーを取得 |
browser_get_cookie | 特定のクッキーを取得 |
browser_add_cookie | クッキーを追加 |
browser_delete_cookie | クッキーを削除 |
browser_delete_all_cookies | すべてのクッキーを削除 |
ウィンドウ/タブ (8ツール)
| ツール | 説明 |
|---|
browser_list_windows | すべてのウィンドウ/タブをリスト表示 |
browser_new_tab | 新しいタブを開く |
browser_new_window | 新しいウィンドウを開く |
browser_switch_window | ウィンドウに切り替え |
browser_close_window | 現在のウィンドウを閉じる |
browser_maximize_window | ウィンドウを最大化 |
browser_minimize_window | ウィンドウを最小化 |
browser_set_window_size | ウィンドウサイズを設定 |
フレーム (3ツール)
| ツール | 説明 |
|---|
browser_switch_to_frame | iframeに切り替え |
browser_switch_to_parent_frame | 親フレームに切り替え |
browser_switch_to_default_content | メインドキュメントに切り替え |
アクション (7ツール)
| ツール | 説明 |
|---|
browser_drag_and_drop | 要素をドラッグ&ドロップ |
browser_right_click | 要素を右クリック |
browser_focus | 要素にフォーカス |
browser_element_state | 要素の状態を取得 (表示、有効、選択) |
browser_press_key | キーボードキーを押す |
browser_file_upload | 入力にファイルをアップロード |
browser_print_to_pdf | ページからPDFを生成 |
要素セレクター
要素をターゲットとするツールはCSSセレクターを受け入れます:
// IDで
"#login-button"
// クラスで
".submit-btn"
// タグと属性で
"input[type='email']"
// データ属性で
"[data-testid='search']"
// 複雑なセレクター
"form.login input[name='password']"
// N番目の子要素
"ul.menu li:nth-child(3)"
例: WebリサーチAgent
use adk_browser::{BrowserSession, BrowserToolset, BrowserConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
let config = BrowserConfig::new().webdriver_url("http://localhost:4444");
let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;
let toolset = BrowserToolset::new(browser.clone())
.with_navigation(true)
.with_extraction(true)
.with_screenshot(true);
let mut builder = LlmAgentBuilder::new("researcher")
.model(model)
.instruction(r#"
You are a web research assistant. When asked about a topic:
1. Navigate to relevant websites using browser_navigate
2. Extract key information using browser_extract_text
3. Take screenshots of important content using browser_screenshot
4. Summarize your findings
"#);
for tool in toolset.all_tools() {
builder = builder.tool(tool);
}
let agent = builder.build()?;
例: フォームの自動化
let agent = LlmAgentBuilder::new("form_filler")
.model(model)
.instruction(r#"
You are a form automation assistant. To fill forms:
1. Use browser_navigate to go to the form page
2. Use browser_extract_text to see form labels
3. Use browser_type to fill text fields
4. Use browser_select for dropdowns
5. Use browser_click to submit
"#)
.build()?;
設定
let config = BrowserConfig::new()
.webdriver_url("http://localhost:4444")
.headless(true)
.viewport(1920, 1080)
.page_load_timeout(30)
.user_agent("Custom User Agent");
let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;
WebDriverオプション
任意のWebDriver互換サーバーで動作します:
| サーバー | Command |
|---|
| Selenium (Chrome) | docker run -d -p 4444:4444 selenium/standalone-chrome |
| Selenium (Firefox) | docker run -d -p 4444:4444 selenium/standalone-firefox |
| ChromeDriver | chromedriver --port=4444 |
| GeckoDriver | geckodriver --port=4444 |
エラー処理
ブラウザツールは構造化されたエラーを返します:
match result {
Ok(value) => println!("Success: {:?}", value),
Err(e) => {
match e {
BrowserError::ElementNotFound(selector) => {
println!("Could not find element: {}", selector);
}
BrowserError::Timeout(duration) => {
println!("Operation timed out after {:?}", duration);
}
BrowserError::SessionClosed => {
println!("Browser session was closed");
}
_ => println!("Browser error: {}", e),
}
}
}
例
# Basic browser session
cargo run --example browser_basic
# AI agent with browser tools
cargo run --example browser_agent
# Full 46-tool interactive example
cargo run --example browser_interactive
# OpenAI-powered browser agent
cargo run --example browser_openai --features openai
ベストプラクティス
- 待機を使用する: 動的なコンテンツと対話する前に、必ず
browser_wait_*ツールを使用してください
- スクリーンショットを最小限に抑える: スクリーンショットはコストがかかるため、戦略的に使用してください
- セッションを閉じる: 完了したら常にブラウザセッションを閉じてください
- エラーを処理する: ブラウザの自動化は失敗する可能性があるため、タイムアウトを適切に処理してください
- ツールをフィルタリングする: 複雑さを軽減するために、Agentには必要なツールのみを与えてください
前へ: ← 組み込みツール | 次へ: UIツール →