Ferramentas de navegador

O crate adk-browser fornece 46 ferramentas abrangentes de automação de navegador que permitem que agentes de IA interajam com páginas da web. Baseado no protocolo WebDriver (Selenium), ele funciona com qualquer navegador compatível com WebDriver.

Visão geral

As ferramentas de navegador permitem que os agentes:

  • Naveguem por páginas da web e gerenciem o histórico do navegador
  • Extraiam texto, links, imagens e dados estruturados
  • Preencham formulários e interajam com elementos da página
  • Façam capturas de tela e gerem PDFs
  • Executem JavaScript para automação avançada
  • Gerenciem cookies, frames e várias janelas

Início rápido

Adicione ao seu Cargo.toml:

[dependencies]
adk-browser = "2.1.0"
adk-agent = "2.1.0"
adk-model = "2.1.0"

Pré-requisitos

Inicie um servidor 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

Uso básico

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(())
}

Ferramentas filtradas

Selecione apenas as ferramentas de que seu agente precisa:

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();

Uso multi-inquilino com conjuntos de ferramentas baseados em pool

Para implantações multi-inquilino em produção, use BrowserToolset::with_pool() junto com LlmAgentBuilder::toolset(). Cada usuário recebe uma sessão de navegador isolada, resolvida do pool em tempo de execução:

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()?;

As sessões do navegador são iniciadas e recuperadas automaticamente de conexões WebDriver obsoletas. Você não precisa mais chamar browser.start() antes de usar as ferramentas — a sessão é iniciada de forma transparente no primeiro uso.

Ferramentas disponíveis (46 no total)

FerramentaDescrição
browser_navigateNavegar para um URL
browser_backVoltar no histórico
browser_forwardAvançar no histórico
browser_refreshAtualizar a página atual

Extração (5 ferramentas)

FerramentaDescrição
browser_extract_textExtrair texto visível do elemento
browser_extract_attributeObter valor do atributo do elemento
browser_extract_linksExtrair todos os links da página
browser_page_infoObter URL e título atuais
browser_page_sourceObter o código-fonte de HTML

Interação (5 ferramentas)

FerramentaDescrição
browser_clickClicar em um elemento
browser_double_clickClicar duas vezes em um elemento
browser_typeDigitar texto no elemento
browser_clearLimpar um campo de entrada
browser_selectSelecionar opção da lista suspensa

Aguardar (4 ferramentas)

FerramentaDescrição
browser_wait_for_elementAguardar o aparecimento do elemento
browser_waitAguardar por uma duração
browser_wait_for_page_loadAguardar o carregamento da página
browser_wait_for_textAguardar o texto aparecer

Capturas de tela (1 ferramenta)

FerramentaDescrição
browser_screenshotCaptura uma captura de tela da página ou do elemento

JavaScript (4 ferramentas)

FerramentaDescrição
browser_evaluate_jsExecutar código JavaScript
browser_scrollRolar a página
browser_hoverPasse o cursor sobre um elemento
browser_handle_alertTrate os alertas JavaScript

Cookies (5 ferramentas)

FerramentaDescrição
browser_get_cookiesObter todos os cookies
browser_get_cookieObter um cookie específico
browser_add_cookieAdicionar um cookie
browser_delete_cookieExcluir um cookie
browser_delete_all_cookiesExcluir todos os cookies

Windows/Abas (8 ferramentas)

FerramentaDescrição
browser_list_windowsListar todas as janelas/abas
browser_new_tabAbrir nova aba
browser_new_windowAbrir nova janela
browser_switch_windowAlternar para a janela
browser_close_windowFechar janela atual
browser_maximize_windowMaximizar janela
browser_minimize_windowMinimizar janela
browser_set_window_sizeDefinir tamanho da janela

Frames (3 ferramentas)

FerramentaDescrição
browser_switch_to_frameAlternar para iframe
browser_switch_to_parent_frameAlternar para o quadro pai
browser_switch_to_default_contentAlternar para o documento principal

Ações (7 ferramentas)

FerramentaDescrição
browser_drag_and_dropArrastar e soltar elementos
browser_right_clickClicar com o botão direito no elemento
browser_focusFocar no elemento
browser_element_stateObter o estado do elemento (visível, habilitado, selecionado)
browser_press_keyPressionar tecla do teclado
browser_file_uploadCarregar arquivo no campo de entrada
browser_print_to_pdfGerar PDF a partir da página

Seletores de elementos

As ferramentas que têm como alvo elementos aceitam seletores 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)"

Exemplo: agente de pesquisa na 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()?;

Exemplo: automação de formulários

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()?;

Configuração

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?;

Opções de WebDriver

Funciona com qualquer servidor compatível com WebDriver:

ServidorComando
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

Tratamento de erros

As ferramentas do navegador retornam erros estruturados:

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),
        }
    }
}

Exemplos

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

Práticas recomendadas

  1. Use esperas: Sempre use as ferramentas browser_wait_* antes de interagir com conteúdo dinâmico
  2. Minimize as capturas de tela: As capturas de tela são dispendiosas; use-as estrategicamente
  3. Feche as sessões: Sempre feche as sessões do navegador quando terminar
  4. Trate os erros: A automação do navegador pode falhar; trate os tempos limite de forma adequada
  5. Filtre as ferramentas: Forneça aos agentes apenas as ferramentas de que precisam para reduzir a complexidade

Anterior: ← Ferramentas integradas | Próximo: Ferramentas de UI →

Ferramentas de navegador - Documentação ADK-Rust | ADK-Rust