브라우저 도구

adk-browser 크레이트는 AI 에이전트가 웹 페이지와 상호 작용할 수 있도록 지원하는 46개의 포괄적인 브라우저 자동화 도구를 제공합니다. WebDriver 프로토콜(Selenium)을 기반으로 하며, 모든 WebDriver 호환 브라우저에서 작동합니다.

개요

브라우저 도구를 사용하면 에이전트가 다음 작업을 수행할 수 있습니다.

  • 웹 페이지를 탐색하고 브라우저 기록 관리
  • 텍스트, 링크, 이미지 및 구조화된 데이터 추출
  • 양식을 작성하고 페이지 요소와 상호 작용
  • 스크린샷을 촬영하고 PDFs 생성
  • 고급 자동화를 위해 JavaScript 실행
  • 쿠키, 프레임 및 여러 창 관리

빠른 시작

Cargo.toml에 추가합니다.

[dependencies]
adk-browser = "2.1.0"
adk-agent = "2.1.0"
adk-model = "2.1.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-3.7-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(())
}

필터링된 도구

에이전트에 필요한 도구만 선택합니다.

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개 도구)

도구설명
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개)

도구설명
browser_screenshot페이지 또는 요소 스크린샷 캡처

JavaScript (도구 4개)

도구설명
browser_evaluate_jsJavaScript 코드 실행
browser_scroll페이지 스크롤
browser_hover요소 위에 마우스를 올립니다
browser_handle_alertJavaScript 경고 처리

쿠키(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_frameiframe으로 전환
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 선택자를 허용합니다:

// 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)"

예시: 웹 조사 에이전트

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. 도구 필터링: 복잡성을 줄이기 위해 에이전트에게 필요한 도구만 제공하세요

이전: ← 기본 제공 도구 | 다음: UI 도구 →

브라우저 도구 - ADK-Rust 문서 | ADK-Rust