2026 est l'année où les agents IA ont cessé d'être de simples démos. browser-use, les agents façon Operator d'OpenAI, le computer use d'Anthropic et une douzaine de frameworks bâtis sur Playwright pilotent désormais de vrais navigateurs sur de vrais sites web — réservation, achat, recherche, surveillance. Et ils se heurtent tous au même mur : les sites sur lesquels ils opèrent les traitent comme des bots, parce que ce sont des bots.
Ce guide couvre spécifiquement la couche proxy pour les agents IA qui pilotent des navigateurs. Si votre agent utilise des bibliothèques HTTP plutôt qu'un navigateur (outils LangChain, scrapers à l'intérieur de CrewAI), consultez Proxies pour agents IA : LangChain, AutoGPT & CrewAI — cet article porte sur les agents qui contrôlent un navigateur complet.
Contre-intuitif mais vrai : un agent LLM qui pilote un vrai navigateur Chrome se fait souvent bloquer plus vite qu'un simple scraper Python. Trois raisons :
navigator.webdriver, des artefacts de timing propres à CDP et des indices de headless. Combiné à une IP signalée, le score franchit le seuil de blocage instantanément.L'IP est la moins coûteuse des trois à corriger, et la corriger à elle seule résout la plupart des blocages : routez l'agent à travers des proxies résidentiels pour que l'histoire de l'IP corresponde à celle du navigateur.
browser-use s'appuie sur Playwright, donc la prise en charge des proxies est native. Le schéma : une session sticky par tâche d'agent, de sorte que l'IP reste stable pendant que l'agent travaille, et une IP nouvelle pour la tâche suivante.
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
import uuid
task_id = uuid.uuid4().hex[:8]
browser = Browser(config=BrowserConfig(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": f"USERNAME-session-{task_id}", # sticky: same IP for this task
"password": "PASSWORD",
},
))
agent = Agent(
task="Find the current price of the Sony WH-1000XM6 on the three largest US retailers.",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
result = await agent.run()
Détail clé : le suffixe session-{task_id}. Sans lui, une passerelle rotative peut remettre à l'agent une nouvelle IP en plein milieu de la tâche — le contenu du panier disparaît, les sessions se coupent et l'agent gaspille des appels au LLM à refaire des étapes. Avec lui, la tâche s'exécute sur une seule IP du début à la fin, et la tâche suivante en reçoit une propre.
Si vous avez construit votre propre boucle d'agent sur Playwright (le schéma derrière la plupart des implémentations façon Operator et computer-use), le proxy se place sur le contexte du navigateur :
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": "USERNAME-session-agent42",
"password": "PASSWORD",
},
viewport={"width": 1366, "height": 768},
locale="en-US",
timezone_id="America/Chicago", # match the proxy country
)
page = await context.new_page()
# ... agent loop: screenshot -> LLM -> action -> repeat
Réglez locale et timezone_id pour qu'ils correspondent au pays du proxy. Un agent qui navigue depuis une IP américaine avec une horloge en UTC+8 est une incohérence que les systèmes comportementaux comptabilisent contre vous.
Les proxies par contexte vous donnent aussi un navigateur, plusieurs agents : chaque new_context() peut porter son propre suffixe de session, de sorte que dix tâches d'agent concurrentes s'exécutent sur dix IP résidentielles distinctes sans dix processus Chrome.
| Charge de travail de l'agent | Stratégie de session | Pourquoi |
|---|---|---|
| Recherche / vérification de prix (sans login) | Sticky, 10 min, nouvelle session par tâche | Stable au sein de la tâche, IP nouvelle entre les tâches |
| Opération sur un compte connecté | Sticky 30 min, même ID de session à chaque exécution | Les sites signalent les comptes qui sautent de pays entre les connexions |
| Flux de checkout / réservation | Sticky 30 min | Un changement d'IP en plein checkout tue la session et déclenche une revue antifraude |
| Surveillance à grand volume (des centaines de pages) | Rotatif, sans épingler de session | Maximiser la diversité d'IP, aucun état à préserver |
Le trafic résidentiel est facturé au GB, et un agent à navigateur télécharge des pages entières — images, polices, traqueurs — contrairement à un scraper HTTP. Sans gestion, une seule tâche d'agent peut consommer 20–50 MB. Trois correctifs, par ordre d'impact :
await context.route("**/*.{png,jpg,jpeg,webp,gif,woff,woff2,mp4}",
lambda route: route.abort())
Si votre agent lit des captures d'écran, gardez les images sur la page cible mais bloquez tout de même la vidéo et les polices. S'il lit le DOM / l'arbre d'accessibilité, bloquez aussi les images — cela réduit le trafic de 60–80%.Avec le blocage des images et un routage ciblé, les tâches typiques d'agent à navigateur se situent dans la plage 2–8 MB — à $2/GB, cela représente quelques centimes par centaine de tâches.
Section honnêteté. Une IP résidentielle corrige l'incohérence d'ASN et la réputation d'IP, qui est le signal individuel au plus fort poids dans le scoring antibot de 2026. Elle ne corrige pas :
requests. Consultez JA3/JA4 expliqués.Empilez les trois sur une IP résidentielle et les agents à navigateur passent les mêmes vérifications que les utilisateurs réels. Pour les cibles les plus coriaces (DataDome, PerimeterX), consultez notre guide DataDome/PerimeterX.
timezone_id/locale au pays du proxy.500 Mo de trafic gratuit — de quoi couvrir plusieurs centaines de tâches d'agent à navigateur avec le blocage de ressources activé.
Démarrer l'essai gratuitLes nouveaux utilisateurs reçoivent 500 Mo à l'inscription, plus un bonus sur la première recharge. Offre à durée limitée.