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)
Navegação (4 ferramentas)
| Ferramenta | Descrição |
|---|---|
browser_navigate | Navegar para um URL |
browser_back | Voltar no histórico |
browser_forward | Avançar no histórico |
browser_refresh | Atualizar a página atual |
Extração (5 ferramentas)
| Ferramenta | Descrição |
|---|---|
browser_extract_text | Extrair texto visível do elemento |
browser_extract_attribute | Obter valor do 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 o código-fonte de HTML |
Interação (5 ferramentas)
| Ferramenta | 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 da lista suspensa |
Aguardar (4 ferramentas)
| Ferramenta | Descrição |
|---|---|
browser_wait_for_element | Aguardar o aparecimento do elemento |
browser_wait | Aguardar por uma duração |
browser_wait_for_page_load | Aguardar o carregamento da página |
browser_wait_for_text | Aguardar o texto aparecer |
Capturas de tela (1 ferramenta)
| Ferramenta | Descrição |
|---|---|
browser_screenshot | Captura uma captura de tela da página ou do elemento |
JavaScript (4 ferramentas)
| Ferramenta | Descrição |
|---|---|
browser_evaluate_js | Executar código JavaScript |
browser_scroll | Rolar a página |
browser_hover | Passe o cursor sobre um elemento |
browser_handle_alert | Trate os alertas JavaScript |
Cookies (5 ferramentas)
| Ferramenta | Descrição |
|---|---|
browser_get_cookies | Obter todos os cookies |
browser_get_cookie | Obter um cookie específico |
browser_add_cookie | Adicionar um cookie |
browser_delete_cookie | Excluir um cookie |
browser_delete_all_cookies | Excluir todos os cookies |
Windows/Abas (8 ferramentas)
| Ferramenta | 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 | Alternar 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)
| Ferramenta | Descrição |
|---|---|
browser_switch_to_frame | Alternar para iframe |
browser_switch_to_parent_frame | Alternar para o quadro pai |
browser_switch_to_default_content | Alternar para o documento principal |
Ações (7 ferramentas)
| Ferramenta | 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 o estado do elemento (visível, habilitado, selecionado) |
browser_press_key | Pressionar tecla do teclado |
browser_file_upload | Carregar arquivo no campo de entrada |
browser_print_to_pdf | Gerar 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:
| 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
cargo check -p adk-browser
cargo check -p adk-rust --no-default-features --features browser
Práticas recomendadas
- Use esperas: Sempre use as ferramentas
browser_wait_*antes de interagir com conteúdo dinâmico - Minimize as capturas de tela: As capturas de tela são dispendiosas; use-as estrategicamente
- Feche as sessões: Sempre feche as sessões do navegador quando terminar
- Trate os erros: A automação do navegador pode falhar; trate os tempos limite de forma adequada
- 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 →