Ferramentas de Navegador
A crate adk-browser oferece 46 ferramentas abrangentes de automação de navegador que permitem aos AI agents interagir com páginas web. Construída sobre o protocolo WebDriver (Selenium), ela funciona com qualquer navegador compatível com WebDriver.
Visão Geral
As ferramentas de navegador permitem que os agents:
- Navegar em páginas web e gerenciar o histórico do navegador
- Extrair texto, links, imagens e dados estruturados
- Preencher formulários e interagir com elementos da página
- Tirar screenshots e gerar PDFs
- Executar JavaScript para automação avançada
- Gerenciar cookies, frames e múltiplas janelas
Início Rápido
Adicione ao seu Cargo.toml:
[dependencies]
adk-browser = "0.2.0"
adk-agent = "0.2.0"
adk-model = "0.2.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-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()?;
// Clean up when done
browser.stop().await?;
Ok(())
}
Ferramentas Filtradas
Selecione apenas as ferramentas que o seu agent 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();
Ferramentas Disponíveis (Total de 46)
Navegação (4 ferramentas)
| Tool | Descrição |
|---|
browser_navigate | Navegar para uma URL |
browser_back | Voltar no histórico |
browser_forward | Avançar no histórico |
browser_refresh | Atualizar página atual |
| Tool | Descrição |
|---|
browser_extract_text | Extrair texto visível do elemento |
browser_extract_attribute | Obter valor de atributo do elemento |
browser_extract_links | Extrair todos os links da página |
browser_page_info | Obter URL e título atuais |
browser_page_source | Obter código-fonte HTML |
Interação (5 ferramentas)
| Tool | Descrição |
|---|
browser_click | Clicar em um elemento |
browser_double_click | Clicar duas vezes em um elemento |
browser_type | Digitar texto no elemento |
browser_clear | Limpar um campo de entrada |
browser_select | Selecionar opção de dropdown |
Espera (4 ferramentas)
| Tool | Descrição |
|---|
browser_wait_for_element | Esperar o elemento aparecer |
browser_wait | Esperar por uma duração |
browser_wait_for_page_load | Esperar a página carregar |
browser_wait_for_text | Esperar o texto aparecer |
Capturas de Tela (1 ferramenta)
| Tool | Descrição |
|---|
browser_screenshot | Capturar captura de tela da página ou elemento |
JavaScript (4 ferramentas)
| Tool | Descrição |
|---|
browser_evaluate_js | Executar código JavaScript |
browser_scroll | Rolar a página |
browser_hover | Passar o mouse sobre um elemento |
browser_handle_alert | Lidar com alertas JavaScript |
Cookies (5 ferramentas)
| Tool | Descrição |
|---|
browser_get_cookies | Obter todos os cookies |
browser_get_cookie | Obter cookie específico |
browser_add_cookie | Adicionar um cookie |
browser_delete_cookie | Excluir um cookie |
browser_delete_all_cookies | Excluir todos os cookies |
Janelas/Abas (8 ferramentas)
| Tool | Descrição |
|---|
browser_list_windows | Listar todas as janelas/abas |
browser_new_tab | Abrir nova aba |
browser_new_window | Abrir nova janela |
browser_switch_window | Trocar para a janela |
browser_close_window | Fechar janela atual |
browser_maximize_window | Maximizar janela |
browser_minimize_window | Minimizar janela |
browser_set_window_size | Definir tamanho da janela |
Frames (3 ferramentas)
| Tool | Descrição |
|---|
browser_switch_to_frame | Trocar para iframe |
browser_switch_to_parent_frame | Trocar para o frame pai |
browser_switch_to_default_content | Trocar para o documento principal |
Ações (7 ferramentas)
| Tool | Descrição |
|---|
browser_drag_and_drop | Arrastar e soltar elementos |
browser_right_click | Clicar com o botão direito no elemento |
browser_focus | Focar no elemento |
browser_element_state | Obter estado do elemento (visível, habilitado, selecionado) |
browser_press_key | Pressionar tecla do teclado |
browser_file_upload | Fazer upload de arquivo para entrada |
browser_print_to_pdf | Gerar PDF a partir da página |
Seletores de Elementos
Ferramentas que visam elementos aceitam seletores CSS:
// Por ID
"#login-button"
// Por classe
".submit-btn"
// Por tag e atributo
"input[type='email']"
// Por atributo de dados
"[data-testid='search']"
// Seletores complexos
"form.login input[name='password']"
// N-ésimo filho
"ul.menu li:nth-child(3)"
Exemplo: Agente de Pesquisa 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()?;
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 do WebDriver
Funciona com qualquer servidor compatível com WebDriver:
| Servidor | Comando |
|---|
| 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 |
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
# 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
Melhores Práticas
- Use Esperas: Sempre use as ferramentas
browser_wait_* antes de interagir com conteúdo dinâmico
- Minimize Capturas de Tela: Capturas de tela são caras; use-as estrategicamente
- Feche Sessões: Sempre feche as sessões do navegador quando terminar
- Trate Erros: A automação do navegador pode falhar; trate os tempos limite graciosamente
- Filtre Ferramentas: Dê aos agentes apenas as ferramentas de que precisam para reduzir a complexidade
Anterior: ← Ferramentas Incorporadas | Próximo: Ferramentas de UI →