L'automatisation de navigateur est depuis longtemps une pierre angulaire du développement logiciel moderne, des tests et de l'extraction de données. Pendant des années, des frameworks comme Selenium, Puppeteer et plus récemment, Playwright, ont dominé le paysage. Ces outils offrent un contrôle granulaire sur les actions du navigateur, mais ils s'accompagnent d'une courbe d'apprentissage abrupte et d'une charge de maintenance importante. Les scripts sont souvent fragiles, se cassant à la moindre modification de l'interface utilisateur d'un site web. À l'autre extrémité du spectre, une nouvelle vague d'agents natifs IA promet d'automatiser des tâches complexes à l'aide du langage naturel, mais souvent au prix de la fiabilité, de la prévisibilité et du contrôle.
Voici Stagehand, un framework qui se présente comme "Le Framework d'Automatisation de Navigateur IA". Il ne vise pas à remplacer des outils éprouvés comme Playwright, mais à les amplifier. Construit au-dessus de Playwright, Stagehand injecte une puissante couche d'IA, permettant aux développeurs de mélanger l'automatisation traditionnelle basée sur le code avec des instructions de haut niveau en langage naturel.
Vous voulez une plateforme intégrée tout-en-un pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?
Apidog répond à toutes vos demandes et remplace Postman à un prix beaucoup plus abordable !
Mais est-ce vraiment si bon ? Trouve-t-il le bon équilibre entre la précision du code et la flexibilité de l'IA ? Cette revue et ce tutoriel approfondis exploreront les concepts fondamentaux de Stagehand, présenteront des exemples pratiques et évalueront sa position dans le monde en évolution rapide de l'automatisation de navigateur.
Pourquoi Stagehand ? Le Problème avec les Anciennes Méthodes
Avant de plonger dans le "comment", il est crucial de comprendre le "pourquoi". L'automatisation de navigateur traditionnelle consiste fondamentalement à dire au navigateur exactement ce qu'il doit faire. Un script typique pourrait ressembler à ceci dans Playwright :
// Find an element by its CSS selector and click it
await page.locator('button[data-testid="login-button"]').click();
// Find an input field and type into it
await page.locator('input[name="username"]').fill('my-user');
Cette approche est précise et fiable... jusqu'à ce qu'elle ne le soit plus. Dès qu'un développeur modifie le data-testid
ou refactorise la structure HTML du formulaire, le script se casse. Maintenir ces sélecteurs sur une grande suite de tests ou un projet de web scraping complexe devient une tâche fastidieuse et ingrate.
Découvrez la démo fournie par l'équipe Stagehand :

Les agents IA de haut niveau essaient de résoudre ce problème en abstrayant les détails d'implémentation. Vous dites simplement à l'agent : "Connecte-toi avec mes identifiants", et il détermine les étapes nécessaires. Bien que cela semble magique, cela peut être imprévisible dans les environnements de production. L'agent pourrait échouer sur une interface utilisateur inconnue, prendre un chemin inefficace ou mal comprendre l'instruction, entraînant des résultats incohérents.
Stagehand vise à offrir une voie intermédiaire. Il reconnaît que parfois vous savez exactement ce que vous voulez faire (par exemple, await page.goto('https://github.com')
), et d'autres fois vous voulez déléguer le "comment" à une IA (par exemple, await page.act('click on the stagehand repo')
). Cette approche hybride est la proposition de valeur fondamentale de Stagehand.
Les Piliers Fondamentaux de Stagehand
Stagehand améliore l'objet Page
de Playwright avec trois méthodes principales : act
, extract
et observe
. Il introduit également un puissant agent
pour gérer des tâches plus complexes et en plusieurs étapes.
act
: Exécuter des Actions avec le Langage Naturel
La méthode act
est le cœur des capacités interactives de Stagehand. Elle prend une instruction en anglais simple et exécute l'action correspondante sur la page.
// Instead of brittle selectors...
await page.act("Click the sign in button");
await page.act("Type 'hello world' into the search input");
En coulisses, un modèle d'IA analyse l'état actuel de la page web (le DOM), identifie les éléments interactifs les plus pertinents (boutons, liens, champs de saisie) et mappe l'instruction à une action spécifique, comme un clic ou une pression de touche. Cela rend les scripts plus résistants aux modifications mineures de l'interface utilisateur. Tant qu'un humain peut identifier le "bouton de connexion", Stagehand le peut probablement aussi, même si son code sous-jacent a changé.
La clé pour utiliser act
efficacement est de garder les instructions atomiques et spécifiques. Une instruction comme "Commande-moi une pizza" est trop de haut niveau pour act
. Au lieu de cela, vous la décomposeriez en une série d'étapes atomiques : "Clique sur la pizza pepperoni", "Sélectionne la taille 'large'", "Ajoute au panier", et "Passe à la caisse".
observe
et Mise en Cache : Ajouter de la Prévisibilité à l'IA
Une préoccupation courante lors de l'utilisation de l'IA est l'imprévisibilité. Le modèle choisira-t-il le bon élément à chaque fois ? Stagehand résout ce problème avec la méthode observe
. observe
n'exécute pas une action ; il renvoie une liste d'actions potentielles qui correspondent à l'instruction.
const [action] = await page.observe("Click the sign in button");
L'objet action
renvoyé est un descripteur sérialisable de l'opération que Stagehand a l'intention d'effectuer. Vous pouvez l'inspecter, l'enregistrer, et, surtout, le réinjecter directement dans act
:
const [action] = await page.observe("Click the sign in button");
await page.act(action);
Ce processus en deux étapes offre une puissante fonctionnalité de "prévisualisation". Mais sa véritable force réside dans la mise en cache. Pour les tâches répétitives, vous pouvez observe
une action une fois, enregistrer le résultat et le réutiliser lors des exécutions ultérieures.
const instruction = "Click the sign in button";
let cachedAction = await getFromCache(instruction);
if (cachedAction) {
await page.act(cachedAction);
} else {
const [observedAction] = await page.observe(instruction);
await saveToCache(instruction, observedAction);
await page.act(observedAction);
}
Cette stratégie de mise en cache offre plusieurs avantages :
- Fiabilité : Elle garantit que la même action exacte est effectuée à chaque fois, éliminant la variabilité du modèle d'IA.
- Vitesse : Elle contourne la nécessité d'un appel à l'IA, rendant l'automatisation significativement plus rapide.
- Coût : Elle économise sur les appels d'API au modèle linguistique sous-jacent, réduisant les coûts opérationnels.
extract
: Extraction Intelligente de Données
Extraire des données d'une page web avec des outils traditionnels implique d'écrire des sélecteurs CSS ou XPath pour cibler les données. C'est une autre forme de couplage fragile à l'interface utilisateur. La méthode extract
de Stagehand révolutionne ce processus en vous permettant de spécifier ce que vous voulez extraire en langage naturel.
Vous pouvez éventuellement fournir un schéma Zod pour vous assurer que la sortie est correctement structurée. Zod est une bibliothèque populaire de déclaration et de validation de schéma TypeScript-first, et son intégration ici est un changement majeur.
Imaginez que vous êtes sur une page de pull request GitHub et que vous voulez obtenir le nom d'utilisateur de l'auteur et le titre de la PR. Avec extract
, c'est aussi simple que cela :
import { z } from "zod";
// ... inside an async function
const { author, title } = await page.extract({
instruction: "extract the author and title of the PR",
schema: z.object({
author: z.string().describe("The username of the PR author"),
title: z.string().describe("The title of the PR"),
}),
});
console.log(`PR: "${title}" by ${author}`);
L'IA de Stagehand lit la page, comprend le contexte et remplit le schéma Zod avec les données demandées. C'est beaucoup plus robuste que de dépendre de sélecteurs comme #pull_request_header .author
qui pourraient changer à tout moment. Vous pouvez même extraire des données imbriquées complexes, y compris des tableaux d'objets, en définissant le schéma Zod approprié.
agent
: Pour les Tâches Autonomes en Plusieurs Étapes
Alors que act
est destiné aux actions uniques et atomiques, agent
est destiné à orchestrer des objectifs plus vastes et plus complexes. L'agent peut prendre un objectif de haut niveau et le décomposer en une séquence d'appels act
et extract
par lui-même.
// Navigate to a website
await stagehand.page.goto("https://www.google.com");
const agent = stagehand.agent({
provider: "openai",
model: "gpt-4o", // Or an Anthropic model
});
// Execute the agent
await agent.execute(
"Find the official website for the Stagehand framework and tell me who developed it."
);
L'agent offre une expérience "human-in-the-loop" pour vos scripts d'automatisation. Il est idéal pour les tâches exploratoires ou la navigation sur des sites web complexes et inconnus où prédéfinir chaque étape serait peu pratique. Il prend en charge les modèles de premier plan d'OpenAI et d'Anthropic, donnant aux développeurs accès aux capacités d'IA de pointe avec une configuration minimale.
Premiers Pas : Un Mini-Tutoriel pour Utiliser l'Équipe Stagehand
Regardez Anirudh faire une démo de create-browser-app pour créer un projet Stagehand ici :
Le moyen le plus rapide de démarrer un projet Stagehand est d'utiliser leur outil en ligne de commande.
npx create-browser-app my-stagehand-project
cd my-stagehand-project
Cela génère un nouveau projet avec toutes les dépendances nécessaires, les fichiers de configuration et un script d'exemple. Vous devrez ajouter vos clés d'API pour un fournisseur LLM (comme OpenAI ou Anthropic) et éventuellement une clé Browserbase (pour l'exécution de navigateur basée sur le cloud) au fichier .env
.
Un script de base ressemble à ceci :
import { Stagehand } from "@browserbasehq/stagehand";
import StagehandConfig from "./stagehand.config"; // Your project's config
import { z } from "zod";
async function main() {
// 1. Initialize Stagehand
const stagehand = new Stagehand(StagehandConfig);
await stagehand.init();
const page = stagehand.page;
try {
// 2. Navigate to a page
await page.goto("https://github.com/trending");
// 3. Perform actions
await page.act("Click on the first repository in the list");
// 4. Extract data
const { description } = await page.extract({
instruction: "Extract the repository description",
schema: z.object({
description: z.string(),
}),
});
console.log("Repository description:", description);
} finally {
// 5. Clean up
await stagehand.close();
}
}
main();
Ce simple exemple démontre le cycle de vie complet : initialisation, navigation, action, extraction et nettoyage. Il est propre, lisible et remarquablement résilient aux modifications de l'interface utilisateur sur la page des tendances GitHub.
Le Verdict : Est-ce Vraiment Bon ?
Après une plongée approfondie dans ses fonctionnalités et sa philosophie, il est clair que Stagehand est plus qu'un simple outil d'automatisation. C'est un framework réfléchi et puissant qui réussit à combler le fossé entre l'automatisation traditionnelle, lourde en code, et le nouveau monde audacieux des agents IA.
Les Points Forts :
- Expérience Développeur : En se basant sur Playwright, il offre une API familière à de nombreux développeurs. L'ajout de
act
etextract
rend l'écriture de scripts d'automatisation plus rapide et plus intuitive. - Résilience : Les scripts sont beaucoup moins fragiles et plus résistants aux modifications de l'interface utilisateur, réduisant considérablement la charge de maintenance.
- Contrôle et Prévisibilité : Le mécanisme
observe
et de mise en cache est une solution brillante au problème d'imprévisibilité de l'IA, le rendant viable pour les cas d'utilisation en production. - Puissance et Flexibilité : La combinaison d'appels
act
atomiques, de schémasextract
intelligents et de l'agent
de haut niveau fournit un éventail d'outils adaptés à presque toutes les tâches d'automatisation de navigateur. - Extraction de Données Structurées : L'intégration avec Zod pour
extract
est une fonctionnalité remarquable, rendant le web scraping plus facile et plus fiable que jamais.
Les Inconvénients Potentiels :
- Dépendance aux LLM : La qualité de l'automatisation est liée aux performances des modèles d'IA sous-jacents. Bien que les modèles actuels soient incroyablement capables, ils ne sont pas parfaits.
- Coût : Les appels d'API aux modèles puissants ne sont pas gratuits. Bien que la stratégie de mise en cache aide à atténuer cela, une utilisation à haut volume pourrait entraîner des coûts.
- Courbe d'Apprentissage : Bien que plus simple que Playwright brut pour de nombreuses tâches, les développeurs doivent toujours comprendre les concepts fondamentaux de
act
,observe
,extract
, et quand utiliser chacun. Penser en termes d'"actions atomiques" vs "objectifs de haut niveau" est une nouvelle compétence.
Conclusion
Alors, est-ce que Stagehand est bon ? Il est exceptionnellement bon. Ce n'est pas une solution miracle, mais il représente un progrès significatif dans l'automatisation de navigateur. Il permet aux développeurs de construire des automatisations plus robustes, plus intelligentes et plus performantes avec moins d'efforts. En vous donnant le choix d'écrire du code de bas niveau lorsque vous avez besoin de précision et d'utiliser une IA de haut niveau lorsque vous avez besoin de flexibilité, Stagehand fournit une boîte à outils pragmatique et puissante pour le développeur moderne.
Si vous êtes un ingénieur QA fatigué de mettre à jour des sélecteurs, un data scientist cherchant une meilleure façon de scraper le web, ou un développeur construisant des workflows complexes basés sur un navigateur, Stagehand ne vaut pas seulement le coup d'œil, il pourrait bien devenir votre nouvel outil préféré. Il tient avec succès sa promesse, ce qui en fait un concurrent de premier plan pour le titre de "Le Framework d'Automatisation de Navigateur IA".
Vous voulez une plateforme intégrée tout-en-un pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?
Apidog répond à toutes vos demandes et remplace Postman à un prix beaucoup plus abordable !