Tutorial Browser Use: aprire pagine, cliccare pulsanti ed estrarre dati con un Agent IA

"Il quickstart ufficiale di Browser Use descrive ambiente Python, installazione di browser-use, uvx browser-use install, chiavi API in .env e primo flusso Agent."
Dopo uvx browser-use install, il vero punto in cui ci si blocca spesso è il task. Se scrivi solo “apri il sito e guarda”, l’agent non sa cosa deve considerare completato. Può provare a vuoto, tirare a indovinare o fermarsi troppo presto.
Browser Use è una libreria Python open source che permette all’IA di controllare un browser Chromium per automazione web. Può girare in locale o in un ambiente self-hosted, senza dipendere da Browser Use Cloud. Se hai già chiaro il concetto di Browser Agent, questo tutorial va dall’installazione al primo task riuscito, includendo configurazione sicura, lettura dei risultati e debug degli errori.
Che cos’è Browser Use: la versione in una frase
Browser Use è una Python library for AI browser automation. Permette a un LLM Agent di usare il browser come una persona: navigare, cliccare, digitare, scorrere, estrarre dati e acquisire screenshot.
Il suo perimetro è l’esecuzione locale o self-hosted, non Browser Use Cloud. La libreria open source e il Cloud Agent hanno API diverse. Questa guida resta sul percorso open source; funzioni del Cloud SDK come structured output, human-in-the-loop e live preview sono fuori ambito.
Se ti stai ancora chiedendo “che cos’è un Browser Agent?”, parti dall’articolo concettuale quando sarà pubblicato. Se il concetto è già chiaro, questa guida risponde alla domanda pratica: come lo faccio girare adesso?
Installazione e preparazione: da uv alla chiave API
Al 2026-06-30, README ufficiale e quickstart descrivono questo percorso:
1. Requisito di versione Python
Browser Use richiede Python 3.11 o superiore. L’esempio del quickstart ufficiale crea un venv con Python 3.12, ma puoi scegliere in base al tuo ambiente.
2. Installare uv (consigliato)
uv è un gestore di pacchetti Python moderno sviluppato da Astral. Se non lo hai ancora:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
3. Inizializzare il progetto e installare browser-use
# Crea la directory del progetto
mkdir my-browser-use
cd my-browser-use
# Inizializza il progetto
uv init
# Installa browser-use con le dipendenze core
uv add "browser-use[core]"
# Sincronizza le dipendenze
uv sync
Se non usi uv, puoi usare anche pip:
pip install "browser-use[core]"
4. Installare l’ambiente Chromium
Browser Use dipende da Playwright sotto il cofano, quindi prima installa Chromium:
uvx browser-use install
Questo comando scarica e configura Chromium, così l’agent può avviare un’istanza del browser.
5. Configurare la chiave API
Browser Use deve collegarsi a un LLM per capire i task e prendere decisioni. Il quickstart ufficiale consiglia ChatBrowserUse, un modello progettato per task browser.
Crea un file .env nella root del progetto:
# .env
BROWSER_USE_API_KEY=your_api_key_here
Se usi OpenAI, Anthropic, Google Gemini o Ollama locale, inserisci la chiave corrispondente:
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GOOGLE_API_KEY=your_google_key
Scrivere il primo script: template minimo
Lo script minimo richiede tre parti: importare i moduli, creare l’Agent, eseguire il task.
from browser_use import Agent, Browser, ChatBrowserUse
import asyncio
async def main():
# Crea un'istanza del browser (visibile durante il debug)
browser = Browser(headless=False)
# Crea l'istanza LLM
llm = ChatBrowserUse()
# Crea l'Agent
agent = Agent(
task="Apri quotes.toscrape.com, scorri verso il basso di una schermata, clicca il pulsante 'Next' ed estrai tutte le quote e gli autori della seconda pagina",
llm=llm,
browser=browser
)
# Esegui il task con limite di passaggi
history = await agent.run(max_steps=20)
# Chiudi il browser
await browser.close()
if __name__ == "__main__":
asyncio.run(main())
Questo script fa alcune cose:
Browser(headless=False): mostra la finestra del browser e rende più semplice il debug. Dopo il debug puoi passare aheadless=True.ChatBrowserUse(): usa il modello browser ufficiale. Puoi anche passare aChatOpenAI(model="gpt-4o")o a un altro modello.taskdeve essere concreto: non scrivere “apri il sito e guarda”. Scrivi “naviga verso X URL, scorri, clicca il pulsante Y, estrai il contenuto Z”. Task vaghi portano a loop o chiusure anticipate.max_steps=20: limita l’agent a un massimo di 20 azioni. Per il primo task, 10-20 passaggi sono un buon intervallo di debug.
Esegui lo script:
uv run python main.py
Non lasciare l’agent correre all’infinito: max_steps è la linea di sicurezza
max_steps limita il numero di passaggi che l’agent può eseguire. Il valore ufficiale di default è 100, ma per il primo task conviene scendere a 10-20.
Perché serve:
- L’agent può incontrare un clic fallito, una pagina lenta, un popup o un elemento nascosto e ripetere la stessa azione.
- Senza limite può consumare tempo e token senza fare progressi.
- L’obiettivo del primo task è verificare che il ciclo funzioni, non completare un workflow complesso alla perfezione. Un limite più basso fa emergere prima il problema.
Impostazioni consigliate:
# Primo task: 10-20 passaggi
await agent.run(max_steps=20)
# Task complesso: aumenta se serve, ma all'inizio evita di superare 50
await agent.run(max_steps=50)
Configurazione sicura per iniziare
Non partire con il tuo account principale già autenticato e non lasciare che l’agent navighi liberamente su qualsiasi sito. Una configurazione iniziale sicura include:
1. Modalità debug headless=False
browser = Browser(headless=False)
La finestra del browser resta visibile. Puoi capire se l’agent clicca nel posto sbagliato, se la pagina si blocca o se la descrizione del task è ambigua. Dopo il debug passa a headless=True.
2. Limitare la navigazione con allowed_domains
browser = Browser(
headless=False,
allowed_domains=["quotes.toscrape.com"]
)
allowed_domains impedisce all’agent di navigare verso altri domini. Se il task riguarda un solo sito, mantieni questa limitazione.
Browser Use supporta wildcard di sottodominio come allowed_domains=["*.example.com"], ma non supporta wildcard di TLD. allowed_domains=["example.*"] non verrà riconosciuto. Per un sito fisso, la scelta più stabile è scrivere il dominio completo:
allowed_domains=["quotes.toscrape.com", "github.com"]
3. Usare un profilo isolato, non il Chrome principale
browser = Browser(
headless=False,
user_data_dir="./browser_profile"
)
L’agent crea un profilo browser separato. Non accede a cookie, stato di login o dati sensibili del tuo Chrome principale. Questo primo tutorial usa solo pagine pubbliche.
4. Non usare disable_security
Il parametro disable_security disattiva le policy di sicurezza del browser. La documentazione ufficiale lo indica come non consigliato. Se lo trovi in un altro tutorial, salta quel passaggio.
Leggere i risultati: non basta vedere il browser muoversi
agent.run() restituisce un AgentHistoryList. Puoi usare diversi helper per leggere risultato e processo:
history = await agent.run(max_steps=20)
# Risultato finale
result = history.final_result()
print("Risultato finale:", result)
# Contenuto estratto
extracted = history.extracted_content()
print("Contenuto estratto:", extracted)
# Lista degli errori
errors = history.errors()
print("Errori:", errors)
# Se ci sono stati errori
if history.has_errors():
print("Il task ha incontrato errori")
# Lista degli URL visitati
urls = history.urls()
print("URL visitati:", urls)
# Percorsi degli screenshot
screenshots = history.screenshot_paths()
print("Screenshot:", screenshots)
# Nomi delle azioni eseguite
actions = history.action_names()
print("Azioni:", actions)
# Numero totale di passaggi
steps = history.number_of_steps()
print("Passaggi:", steps)
Un errore comune all’inizio è guardare la finestra del browser muoversi e considerare il task riuscito. Se final_result() è vuoto, l’agent potrebbe essersi fermato troppo presto o aver capito male il task. Se errors() contiene elementi, leggili prima di cambiare il prompt.
Prima serie di task: aprire, cliccare, estrarre
Usa quotes.toscrape.com come primo ambiente. È un sito pubblico creato per esercitarsi con lo scraping, non richiede login e ha una struttura semplice.
task 1: aprire e scorrere
agent = Agent(
task="Apri quotes.toscrape.com e scorri verso il basso di una schermata",
llm=ChatBrowserUse(),
browser=Browser(headless=False, allowed_domains=["quotes.toscrape.com"])
)
history = await agent.run(max_steps=10)
print("URL visitati:", history.urls())
task 2: cliccare un pulsante
agent = Agent(
task="Apri quotes.toscrape.com e clicca il pulsante 'Next' in fondo alla pagina",
llm=ChatBrowserUse(),
browser=Browser(headless=False, allowed_domains=["quotes.toscrape.com"])
)
history = await agent.run(max_steps=10)
print("Successo:", history.is_successful())
task 3: estrarre contenuti
agent = Agent(
task="Apri quotes.toscrape.com ed estrai tutti i testi delle quote e i relativi autori dalla prima pagina",
llm=ChatBrowserUse(),
browser=Browser(headless=False, allowed_domains=["quotes.toscrape.com"])
)
history = await agent.run(max_steps=15)
extracted = history.extracted_content()
print("Contenuto estratto:", extracted)
task 4: combinare i passaggi
agent = Agent(
task="Apri quotes.toscrape.com, clicca il pulsante 'Next' ed estrai tutti i testi delle quote e i relativi autori dalla seconda pagina",
llm=ChatBrowserUse(),
browser=Browser(headless=False, allowed_domains=["quotes.toscrape.com"])
)
history = await agent.run(max_steps=20)
print("Risultato finale:", history.final_result())
print("Errori:", history.errors())
Dove guardare quando fallisce
Quando l’agent restituisce un risultato vuoto, segnala un errore o si blocca, segui questa checklist:
1. Clic fallito
- Controlla se
history.errors()contiene “click failed” o “element not found” - Aggiungi un fallback da tastiera nel task: “se il clic fallisce, usa Tab per mettere a fuoco il pulsante e premi Enter”
- Controlla
history.screenshot_paths()per capire se l’elemento era visibile
2. Estrazione vuota
- Controlla
history.urls()per confermare che la pagina sia stata davvero aperta - Controlla
history.screenshot_paths()per vedere lo stato della pagina - Verifica che il task sia specifico: “estrai tutti i testi delle quote e i relativi autori”, non “guarda il contenuto”
3. Pagina bloccata
- Controlla se
allowed_domainsha bloccato una navigazione - Controlla connessione e tempo di caricamento
- Riduci
max_stepso aggiungi comportamento di timeout: “se la pagina non carica entro 10 secondi, torna alla home”
4. Risultato incompleto
- Controlla se
max_stepsha interrotto il run troppo presto - Controlla
history.number_of_steps()per vedere quanti passaggi sono stati usati - Riscrivi il task e dividilo in sottotask più piccoli
5. Fallimento complessivo
- Controlla che la chiave API in
.envsia corretta - Conferma che il modello sia supportato: ChatBrowserUse, OpenAI, Anthropic, Google Gemini o Ollama locale
- Verifica se il task è troppo astratto: sostituisci “apri il sito e guarda” con azioni concrete
Beta Agent vs API stabile: due ingressi
Al 2026-06-30, il README ufficiale descrive due percorsi di import per Agent:
API stabile
from browser_use import Agent, Browser
Questo è l’ingresso stabile. Se usavi già Browser Use, puoi continuare con questo percorso.
API beta (0.13)
from browser_use.beta import Agent, BrowserProfile, ChatBrowserUse
Questo è il beta agent 0.13, basato su Rust core e browser harness. Il README ufficiale dice che gli utenti esistenti possono restare sull’API stabile, mentre i nuovi possono provare la beta.
Se hai dubbi, controlla il README ufficiale attuale. Questa guida usa esempi stabili; l’API beta può essere diversa.
Open source vs Cloud: capire il confine
Questa guida usa la libreria open source Browser Use in locale.
Browser Use Cloud è un servizio hosted con API diversa:
- Il Cloud SDK usa attualmente API v3
- Cloud offre structured output, human-in-the-loop, live preview, persistent profiles e altre funzioni di produzione
- Il SDK Python/TypeScript Cloud non è compatibile con l’API della libreria open source
Quando ha senso considerare Cloud:
- Deployment in produzione o runtime hosted
- Esigenze avanzate come stealth, CAPTCHA e proxy, non trattate qui
- Account multipli, profili persistenti e collaborazione in team
Questa guida resta sull’onboarding locale. Uso di Cloud e prezzi appartengono a un articolo successivo.
Prossimi passi
Questo tutorial copre l’ingresso locale in Browser Use: installazione, chiavi API, script minimo, apertura di una pagina, clic su un pulsante, estrazione di informazioni e debug degli errori.
Buoni prossimi passi:
- Già pubblicati: guida pratica OpenClaw per l’automazione browser, Computer-Use Agent: far usare il computer all’IA, guida ai plugin MCP
- Temi successivi: Playwright MCP con Claude, Codex e Cursor; ingegneria Stagehand; scelta degli strumenti Browser Use; stato di login e autenticazione; infrastruttura cloud; compliance e sicurezza
- Documentazione ufficiale: quickstart, prompting guide, browser config
Fai funzionare prima un task su quotes.toscrape.com o su una pagina GitHub pubblica. Solo dopo passa a stato di login e Cloud.
Eseguire il primo Agent di automazione web con Browser Use
Un flusso minimo Browser Use, dall'installazione alla lettura del risultato, per validare apertura, clic ed estrazione su una pagina pubblica.
⏱️ Estimated time: 30 min
- 1
Step 1: Preparare l'ambiente Python
Verifica di avere Python 3.11 o superiore. L'esempio del quickstart ufficiale usa un ambiente virtuale Python 3.12, ma puoi scegliere la versione adatta al progetto. - 2
Step 2: Installare browser-use
Inizializza un progetto con uv e installa browser-use[core], oppure installa browser-use[core] con pip in un ambiente Python esistente. - 3
Step 3: Installare il runtime Chromium
Esegui uvx browser-use install per scaricare e configurare il runtime Chromium usato da Browser Use. - 4
Step 4: Configurare una chiave API del modello
Aggiungi in .env la chiave necessaria, come BROWSER_USE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY o GOOGLE_API_KEY. Non inserire password reali di account nel prompt. - 5
Step 5: Scrivere lo script Agent minimo
Crea Browser, LLM e Agent. Scrivi il task come passaggi concreti: aprire quotes.toscrape.com, cliccare Next ed estrarre testo delle quote e autori. - 6
Step 6: Limitare il perimetro di esecuzione
Durante il debug usa headless=False per vedere il browser e configura allowed_domains, così l'agent visita solo i domini previsti. - 7
Step 7: Leggere history per controllare il risultato
Dopo agent.run(max_steps=20), controlla final_result(), extracted_content(), errors(), urls(), screenshot_paths() e action_names() per verificare che il task sia davvero completato.
FAQ
Che cos'è Browser Use e in cosa differisce da Playwright o Selenium?
Meglio usare Browser Use open source o Browser Use Cloud?
Quale modello usare con Browser Use?
Perché Browser Use ha un Agent beta e uno stabile?
Come limito Browser Use a un sito specifico?
Come ottengo il risultato finale da Browser Use?
Cosa fare se Browser Use non riesce a cliccare o non estrae nulla?
Il primo script Browser Use può accedere al mio account reale?
10 min di lettura · Pubblicato il: 4 set 2026 · Aggiornato il: 4 set 2026
Guida pratica agli agenti di automazione browser
Se arrivi dalla ricerca, il modo più veloce per orientarti è passare all’articolo precedente o successivo della stessa serie.
Precedente
Che cos’è un Browser Agent? Perché l’IA sta iniziando a usare i browser da sola
Una guida chiara a Browser Agent: in cosa differisce da crawler, RPA, script Selenium/Playwright e Computer Use. Scopri lo stack a cinque livelli, quando usarlo, quando evitarlo e come iniziare con Browser Use, Stagehand, Playwright MCP e Browserbase.
Parte 1 di 3
Successivo
Guida pratica a Playwright MCP: far controllare il browser a Claude, Codex e Cursor
Collega l'automazione browser ufficiale di Playwright MCP a Claude Code, Codex e Cursor: configura @playwright/mcp@latest, valida primo clic, screenshot e console, e chiarisci i limiti di accessibility snapshot, profile, storage state, approvazioni e browser_run_code_unsafe.
Parte 3 di 3



Commenti
Accedi con GitHub per lasciare un commento