Outils de navigateur
La crate adk-browser fournit 46 outils complets d’automatisation de navigateur permettant aux agents d’IA d’interagir avec des pages web. Fondée sur le protocole WebDriver (Selenium), elle fonctionne avec tout navigateur compatible avec WebDriver.
Vue d’ensemble
Les outils de navigateur permettent aux agents de :
- Naviguer sur des pages web et gérer l’historique du navigateur
- Extraire du texte, des liens, des images et des données structurées
- Remplir des formulaires et interagir avec les éléments de la page
- Prendre des captures d’écran et générer des PDFs
- Exécuter des JavaScript pour une automatisation avancée
- Gérer les cookies, les cadres et plusieurs fenêtres
Démarrage rapide
Ajoutez à votre Cargo.toml :
[dependencies]
adk-browser = "2.1.0"
adk-agent = "2.1.0"
adk-model = "2.1.0"
Prérequis
Démarrez un serveur 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
Utilisation de base
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(())
}
Outils filtrés
Sélectionnez uniquement les outils dont votre agent a besoin :
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();
Utilisation multi-locataire avec des ensembles d’outils adossés à un pool
Pour les déploiements multi-locataires en production, utilisez BrowserToolset::with_pool() avec LlmAgentBuilder::toolset(). Chaque utilisateur obtient une session de navigateur isolée, résolue depuis le pool au moment de l’exécution :
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()?;
Les sessions de navigateur démarrent automatiquement et récupèrent automatiquement les connexions WebDriver obsolètes. Vous n’avez plus besoin d’appeler browser.start() avant d’utiliser les outils : la session démarre de manière transparente lors de la première utilisation.
Outils disponibles (46 au total)
Navigation (4 outils)
| Outil | Description |
|---|---|
browser_navigate | Accéder à URL |
browser_back | Revenir en arrière dans l’historique |
browser_forward | Avancer dans l’historique |
browser_refresh | Actualiser la page actuelle |
Extraction (5 outils)
| Outil | Description |
|---|---|
browser_extract_text | Extraire le texte visible d’un élément |
browser_extract_attribute | Obtenir la valeur d’un attribut d’un élément |
browser_extract_links | Extraire tous les liens de la page |
browser_page_info | Obtenir le URL et le titre actuels |
browser_page_source | Obtenir la source de HTML |
Interaction (5 outils)
| Outil | Description |
|---|---|
browser_click | Cliquer sur un élément |
browser_double_click | Double-cliquer sur un élément |
browser_type | Saisir du texte dans l’élément |
browser_clear | Effacer un champ de saisie |
browser_select | Sélectionner une option de liste déroulante |
Attendre (4 outils)
| Outil | Description |
|---|---|
browser_wait_for_element | Attendre l’apparition d’un élément |
browser_wait | Attendre pendant une durée |
browser_wait_for_page_load | Attendre le chargement de la page |
browser_wait_for_text | Attendre que le texte apparaisse |
Captures d’écran (1 outil)
| Outil | Description |
|---|---|
browser_screenshot | Capture une capture d’écran de la page ou de l’élément |
JavaScript (4 outils)
| Outil | Description |
|---|---|
browser_evaluate_js | Exécuter du code JavaScript |
browser_scroll | Faire défiler la page |
browser_hover | Survoler un élément |
browser_handle_alert | Gérer les alertes JavaScript |
Cookies (5 outils)
| Outil | Description |
|---|---|
browser_get_cookies | Obtenir tous les cookies |
browser_get_cookie | Obtenir un cookie spécifique |
browser_add_cookie | Ajouter un cookie |
browser_delete_cookie | Supprimer un cookie |
browser_delete_all_cookies | Supprimer tous les cookies |
Fenêtres/Onglets (8 outils)
| Outil | Description |
|---|---|
browser_list_windows | Répertorier toutes les fenêtres/onglets |
browser_new_tab | Ouvrir un nouvel onglet |
browser_new_window | Ouvrir une nouvelle fenêtre |
browser_switch_window | Changer de fenêtre |
browser_close_window | Fermer la fenêtre actuelle |
browser_maximize_window | Agrandir la fenêtre |
browser_minimize_window | Réduire la fenêtre |
browser_set_window_size | Définir la taille de la fenêtre |
Frames (3 outils)
| Outil | Description |
|---|---|
browser_switch_to_frame | Basculer vers l’iframe |
browser_switch_to_parent_frame | Basculer vers le cadre parent |
browser_switch_to_default_content | Passer au document principal |
Actions (7 outils)
| Outil | Description |
|---|---|
browser_drag_and_drop | Faire glisser-déposer des éléments |
browser_right_click | Cliquer avec le bouton droit sur l’élément |
browser_focus | Mettre le focus sur l’élément |
browser_element_state | Obtenir l’état de l’élément (visible, activé, sélectionné) |
browser_press_key | Appuyer sur une touche du clavier |
browser_file_upload | Téléverser un fichier dans le champ de saisie |
browser_print_to_pdf | Générer PDF depuis la page |
Sélecteurs d’éléments
Les outils qui ciblent des éléments acceptent les sélecteurs 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)"
Exemple : agent de recherche 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()?;
Exemple : automatisation de formulaires
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()?;
Configuration
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?;
Options WebDriver
Fonctionne avec tout serveur compatible avec WebDriver :
| Serveur | Commande |
|---|---|
| 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 |
Gestion des erreurs
Les outils de navigateur renvoient des erreurs structurées :
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),
}
}
}
Exemples
cargo check -p adk-browser
cargo check -p adk-rust --no-default-features --features browser
Bonnes pratiques
- Utiliser des attentes : utilisez toujours les outils
browser_wait_*avant d’interagir avec du contenu dynamique - Minimiser les captures d’écran : les captures d’écran sont coûteuses ; utilisez-les judicieusement
- Fermer les sessions : fermez toujours les sessions du navigateur lorsque vous avez terminé
- Gérer les erreurs : l’automatisation du navigateur peut échouer ; gérez les délais d’attente avec élégance
- Filtrer les outils : ne donnez aux agents que les outils dont ils ont besoin afin de réduire la complexité
Précédent : ← Outils intégrés | Suivant : Outils d’interface utilisateur →