Pour créer un agent Browser Use en Python, donnez à Agent un modèle, un nouveau Browser et une tâche dont vous connaissez la réponse. L'agent lit un titre et un code sur une page HTML locale. Pydantic vérifie le format, puis le programme compare chaque valeur au contenu de la page.
Un signalement sur GitHub décrit une ancienne version qui rejetait des actions générées par le modèle. C'est une étape distincte de la production de la réponse. L'exemple suit le démarrage rapide Python et le guide du format de sortie. Le code a été relu à partir de ces sources. Il reste à l'exécuter de bout en bout.
À retenir
Choisissez la bibliothèque Python de Browser Use pour gérer la session, la tâche et les vérifications dans votre application.
Commencez par un fichier local et une session sans compte connecté.
Vous pouvez choisir séparément où tournent le navigateur et le modèle.
ChatBrowserUseappelle un modèle hébergé même avec Chromium en local.history.is_successful()donne l'appréciation de l'agent. Comparez les valeurs à la page.Pour le premier essai, utilisez une page sans formulaire, compte ou envoi de fichier.
Où tournent le navigateur et le modèle
Le modèle sélectionne les actions, le navigateur les exécute et Python les relie. Cette distinction aide à choisir entre un agent de navigation, un script Playwright déterministe et une simple recherche web.
| Configuration | Emplacement du navigateur | Quand l'utiliser |
|---|---|---|
| Bibliothèque Python et navigateur local | Sur la machine du script | Lire une page locale et contrôler la réponse dans Python |
| Bibliothèque Python et navigateur distant | Dans une session accessible au script | Utiliser une infrastructure distante capable d'atteindre la page |
| Agent hébergé Browser Use Cloud | Sur une infrastructure gérée | Utiliser l'API de l'agent hébergé avec une cible accessible |
L'exercice suit la première option. Placez BROWSER_USE_API_KEY dans l'environnement ou un fichier .env local comme dans le guide de démarrage. Gardez la clé hors du dépôt. Exécutez ces commandes dans un nouveau dossier avec uv installé.
uv init --python 3.12
uv add browser-use
uvx browser-use installLa dernière commande prépare Chromium. Conservez le fichier de verrouillage pour retrouver la même installation. Le guide des modèles compatibles présente aussi ChatOllama. Si vous changez de fournisseur, conservez la page et les valeurs attendues. Vérifiez les actions et la sortie finale. Le guide Cloud détaille sa propre configuration d'accès et de session.
Une question de QA sur Reddit demande un modèle auto-hébergé pour garder les données client sur place. Cette contrainte demande un modèle local. L'exercice transmet seulement des données fictives.
Créer une page dont la réponse est connue
Enregistrez ce fichier sous fixture/index.html. Il contient du texte et un code fictif, sans formulaire ni identifiants. Lancez le serveur dans un autre terminal. Il ne sert que le dossier fixture.
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Inventory fixture</title>
<main>
<h1>Inventory Check</h1>
<p>Reference code: BU-741</p>
</main>
</html>uv run python -m http.server 8765 --bind 127.0.0.1 --directory fixtureL'adresse 127.0.0.1 désigne la machine du navigateur. Un navigateur distant se connectera à sa propre adresse locale. Pour cet exercice, gardez le serveur et Chromium sur la même machine. Ouvrez la page manuellement si vous devez vérifier qu'elle répond.
Lancer l'agent et vérifier les deux champs
Enregistrez check_page.py à la racine. Les paramètres du navigateur décrivent la liste des domaines autorisés. Les paramètres d'Agent décrivent le schéma. La consigne indique l'URL. Les valeurs attendues restent dans le code de vérification.
import asyncio
from tempfile import TemporaryDirectory
from browser_use import Agent, Browser, ChatBrowserUse
from pydantic import BaseModel
URL = "http://127.0.0.1:8765/"
class PageCheck(BaseModel):
heading: str
reference: str
async def main():
with TemporaryDirectory(prefix="browser-use-fixture-") as profile:
browser = Browser(
headless=True,
user_data_dir=profile,
allowed_domains=["127.0.0.1"],
accept_downloads=False,
)
try:
agent = Agent(
task=(
f"Open {URL} and read its visible heading and reference code. "
"Return only those two values. Do not interact with any form."
),
browser=browser,
llm=ChatBrowserUse(),
output_model_schema=PageCheck,
)
history = await agent.run(max_steps=5)
result = history.structured_output
expected = PageCheck(heading="Inventory Check", reference="BU-741")
if result != expected:
raise RuntimeError("The output does not match the fixture.")
print(result.model_dump_json())
finally:
await browser.stop()
if __name__ == "__main__":
asyncio.run(main())uv run python check_page.pySi le script imprime le résultat attendu, le titre sera Inventory Check et le code BU-741. En cas d'écart, consultez l'historique avant d'augmenter le nombre d'étapes. L'agent pourrait simplement répéter une action qui échoue.
Vérifier la visite, la sortie et les effets séparément

Cherchez une requête vers / dans le journal du serveur pendant l'exécution. Comparez-la à history.urls(), history.errors() et à la sortie du script. Le guide du format de sortie distingue la fin du traitement, le succès déclaré et la vérification externe.
Gardez le profil de test séparé de votre profil courant. Réutiliser un navigateur existant change les sessions et cookies accessibles à l'agent. La liste de domaines limite la navigation. Sur un système réel, appliquez les droits de lecture sur le serveur et utilisez un compte de test. Voir les risques de sécurité des agents.
Repérer la première étape en échec
| Symptôme | À vérifier d'abord | Vérification suivante |
|---|---|---|
| Le navigateur démarre mais aucune requête n'arrive | Emplacement, adresse locale, port et règles de navigation | Ouvrez la page depuis l'environnement de Chromium |
| Le fournisseur refuse la requête | Clé, endpoint, adaptateur et accès au modèle | Lisez l'erreur du fournisseur avant de modifier le navigateur |
| L'historique contient des actions invalides | Adaptateur et version de Browser Use | Rejouez l'exercice avec un adaptateur documenté |
| L'objet est valide mais un champ diffère | Contenu observé et texte recopié | Comparez chaque champ au HTML et au journal |
Un signalement sur le CDP distant décrit un blocage lors d'appels au protocole du navigateur. Ce problème survient à une autre étape que la validation des actions. Ces signalements concernent des versions précises. Partez de votre propre journal.
Si une tâche peut créer un enregistrement ou envoyer un message, vérifiez le système cible avant de relancer après une expiration. Pour la page locale en lecture seule, vous pouvez refaire la visite et consulter le journal.
Quand garder l'intégration Python
Gardez Python quand une application doit recevoir et vérifier des champs typés. Une URL, des sélecteurs et des étapes stables se prêtent à un script de navigateur. Pour une vérification ponctuelle, ouvrez la page et lisez le texte. La comparaison Tabbit et Browser Use et le guide des navigateurs avec agents expliquent la différence entre interface et intégration Python.
Au premier lancement, vérifiez que la requête atteint le serveur et que les deux champs correspondent. Changez ensuite le navigateur, le fournisseur ou le site un par un.
Questions fréquentes
La bibliothèque Python exige-t-elle une clé Browser Use ?
L'adaptateur ChatBrowserUse exige une clé Browser Use. Les autres adaptateurs ont leur propre configuration et Ollama peut tourner localement sans cette clé.
Puis-je utiliser un modèle Ollama local ?
Oui, le guide présente ChatOllama. Vérifiez que votre modèle sait produire les actions du navigateur et une sortie conforme au schéma.
Comment garder la première tâche en lecture seule ?
Utilisez une page de test sans compte ni point d'écriture. Sur une vraie application, appliquez les permissions de lecture sur le serveur.
Pourquoi le navigateur distant ne peut-il pas ouvrir localhost ?
L'adresse locale désigne l'hôte du navigateur. Lancez les deux processus sur la même machine ou fournissez un point de test accessible au navigateur distant.
Que signifie history.is_successful() ?
La méthode renvoie le jugement de l'agent. Vérifiez séparément le système cible et les valeurs renvoyées.
Que faire si structured_output est vide ?
Consultez l'historique pour trouver les erreurs de navigation, de fournisseur ou d'action. Vérifiez que la tâche s'est terminée avec output_model_schema configuré avant de changer le schéma ou le nombre d'étapes.