ブラウザツール

adk-browser crateは、AI Agentがウェブページと対話できるようにする46の包括的なブラウザ自動化ツールを提供します。WebDriverプロトコル (Selenium) をベースにしており、あらゆるWebDriver互換ブラウザで動作します。

概要

ブラウザツールを使用すると、Agentは次のことができます。

  • ウェブページをナビゲートし、ブラウザ履歴を管理する
  • テキスト、リンク、画像、構造化データを抽出する
  • フォームに入力し、ページ要素と対話する
  • スクリーンショットを撮影し、PDFsを生成する
  • 高度な自動化のためにJavaScriptを実行する
  • クッキー、フレーム、複数のウィンドウを管理する

クイックスタート

あなたのCargo.tomlに追加してください:

[dependencies]
adk-browser = "2.0.0"
adk-agent = "2.0.0"
adk-model = "2.0.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>> {
    // Configure browser session
    let config = BrowserConfig::new()
        .webdriver_url("http://localhost:4444")
        .headless(true)
        .viewport(1920, 1080);

    // Create and start browser session
    let browser = Arc::new(BrowserSession::new(config));
    browser.start().await?;

    // Create toolset with all 46 tools
    let toolset = BrowserToolset::new(browser.clone());
    let tools = toolset.all_tools();

    // Create AI agent with browser tools
    let api_key = std::env::var("GOOGLE_API_KEY")?;
    let model = Arc::new(GeminiModel::new(&api_key, "gemini-2.5-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()?;

    // Clean up when done
    browser.stop().await?;

    Ok(())
}

フィルタリングされたツール

Agentが必要とするツールのみを選択します:

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)     // Disable cookie tools
    .with_frames(false)      // Disable frame tools
    .with_windows(false)     // Disable window tools
    .with_actions(false);    // Disable advanced actions

let tools = toolset.all_tools();

プールバックアップされたツールセットによるマルチテナント利用

本番環境のマルチテナントデプロイメントでは、BrowserToolset::with_pool()LlmAgentBuilder::toolset()と組み合わせて使用します。各ユーザーは、実行時にプールから解決される分離されたブラウザセッションを取得します:

use adk_browser::{BrowserSessionPool, BrowserToolset, BrowserConfig, BrowserProfile};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;

let pool = Arc::new(BrowserSessionPool::new(BrowserConfig::new(), 10));

// Pool-backed toolset — sessions resolved per-user via ctx.user_id()
let toolset = Arc::new(BrowserToolset::with_pool_and_profile(
    pool,
    BrowserProfile::Scraping,
));

let agent = LlmAgentBuilder::new("web_agent")
    .model(model)
    .instruction("You are a web research assistant.")
    .toolset(toolset)
    .build()?;

ブラウザセッションは自動的に開始され、古いWebDriver接続から自動的に回復します。ツールを使用する前にbrowser.start()を呼び出す必要はなくなりました。セッションは初回使用時に透過的に開始されます。

利用可能なツール (合計46)

ツール説明
browser_navigateURL に移動する
browser_back履歴を戻る
browser_forward履歴を進む
browser_refresh現在のページを更新する

抽出 (5 tools)

ツール説明
browser_extract_text要素から表示されているテキストを抽出する
browser_extract_attribute要素から属性値を取得する
browser_extract_linksページ上のすべてのリンクを抽出する
browser_page_info現在の URL とタイトルを取得する
browser_page_sourceHTML ソースを取得する

相互作用 (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 Tool)

Tool説明
browser_screenshotページまたは要素のスクリーンショットをキャプチャ

JavaScript (4つのツール)

ツール説明
browser_evaluate_jsJavaScript codeを実行する
browser_scrollページをスクロールする
browser_hover要素にホバーする
browser_handle_alertJavaScript アラートを処理する

クッキー (5 tools)

ツール説明
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_frameiframeに切り替える
browser_switch_to_parent_frame親フレームに切り替える
browser_switch_to_default_contentメイン文書に切り替える

アクション (7つのツール)

Tool説明
browser_drag_and_drop要素をドラッグアンドドロップする
browser_right_click要素を右クリックする
browser_focus要素にフォーカスする
browser_element_state要素の状態(表示、有効、選択)を取得する
browser_press_keyキーボードのキーを押す
browser_file_upload入力にファイルをアップロードする
browser_print_to_pdfページから PDF を生成

要素セレクター

要素をターゲットとするツールは、CSS セレクターを受け入れます。

// By ID
"#login-button"

// By class
".submit-btn"

// By tag and attribute
"input[type='email']"

// By data attribute
"[data-testid='search']"

// Complex selectors
"form.login input[name='password']"

// Nth child
"ul.menu li:nth-child(3)"

例: Webリサーチエージェント

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 互換サーバーで動作します。

サーバーコマンド
Selenium (Chrome)docker run -d -p 4444:4444 selenium/standalone-chrome
Selenium (Firefox)docker run -d -p 4444:4444 selenium/standalone-firefox
ChromeDriverchromedriver --port=4444
GeckoDrivergeckodriver --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),
        }
    }
}

cargo check -p adk-browser
cargo check -p adk-rust --no-default-features --features browser

ベストプラクティス

  1. 待機を使用する: 動的なコンテンツとやり取りする前に、常にbrowser_wait_*ツールを使用してください
  2. スクリーンショットを最小限に抑える: スクリーンショットはコストがかかるため、戦略的に使用してください
  3. セッションを閉じる: 完了したら常にブラウザセッションを閉じてください
  4. エラーを処理する: ブラウザの自動化は失敗する可能性があるため、タイムアウトを適切に処理してください
  5. ツールをフィルタリングする: 複雑さを軽減するために、エージェントに必要なツールのみを与えてください

前へ: ← Built-in Tools | 次へ: UI Tools →