2026 es el año en que los agentes de IA dejaron de ser demos. browser-use, los agentes estilo Operator de OpenAI, el computer use de Anthropic y una docena de frameworks construidos sobre Playwright ahora controlan navegadores reales contra sitios web reales — reservando, comprando, investigando, monitoreando. Y todos chocan contra el mismo muro: los sitios sobre los que operan los tratan como bots, porque son bots.
Esta guía cubre específicamente la capa de proxy para agentes de IA que controlan navegadores. Si tu agente usa librerías HTTP en lugar de un navegador (herramientas de LangChain, scrapers dentro de CrewAI), consulta Proxies para agentes de IA: LangChain, AutoGPT & CrewAI — este artículo trata sobre agentes que controlan un navegador completo.
Contraintuitivo pero cierto: un agente LLM que controla un navegador Chrome real a menudo se bloquea más rápido que un simple scraper de Python. Tres razones:
navigator.webdriver, artefactos de tiempo específicos de CDP y señales de headless. Combinado con una IP marcada, la puntuación cruza el umbral de bloqueo al instante.La IP es la más barata de las tres de corregir, y corregirla por sí sola resuelve la mayoría de los bloqueos: enruta el agente a través de proxies residenciales para que la historia de la IP coincida con la historia del navegador.
browser-use se apoya en Playwright, así que el soporte de proxy es nativo. El patrón: una sesión sticky por tarea de agente, de modo que la IP se mantenga estable mientras el agente trabaja, y una IP nueva para la siguiente tarea.
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()
Detalle clave: el sufijo session-{task_id}. Sin él, una puerta de enlace rotativa puede entregarle al agente una IP nueva a mitad de la tarea — el contenido del carrito desaparece, las sesiones se caen y el agente desperdicia llamadas al LLM rehaciendo pasos. Con él, la tarea se ejecuta en una sola IP de principio a fin, y la siguiente tarea recibe una limpia.
Si has construido tu propio bucle de agente sobre Playwright (el patrón detrás de la mayoría de las implementaciones estilo Operator y computer-use), el proxy va en el contexto del navegador:
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
Configura locale y timezone_id para que coincidan con el país del proxy. Un agente navegando desde una IP de EE. UU. con un reloj en UTC+8 es una incoherencia que los sistemas conductuales puntúan en tu contra.
Los proxies por contexto también te dan un navegador, muchos agentes: cada new_context() puede llevar su propio sufijo de sesión, de modo que diez tareas de agente concurrentes se ejecutan sobre diez IP residenciales distintas sin diez procesos de Chrome.
| Carga de trabajo del agente | Estrategia de sesión | Por qué |
|---|---|---|
| Investigación / verificación de precios (sin login) | Sticky, 10 min, nueva sesión por tarea | Estable dentro de la tarea, IP nueva entre tareas |
| Operación de cuenta con sesión iniciada | Sticky 30 min, mismo ID de sesión en cada ejecución | Los sitios marcan las cuentas que saltan de país entre inicios de sesión |
| Flujos de checkout / reserva | Sticky 30 min | Un cambio de IP a mitad del checkout mata la sesión y dispara una revisión por fraude |
| Monitoreo de alto volumen (cientos de páginas) | Rotativo, sin fijar sesión | Maximizar la diversidad de IP, sin estado que preservar |
El tráfico residencial se factura por GB, y un agente con navegador descarga páginas completas — imágenes, fuentes, rastreadores — a diferencia de un scraper HTTP. Sin gestionar, una sola tarea de agente puede consumir 20–50 MB. Tres soluciones, por orden de impacto:
await context.route("**/*.{png,jpg,jpeg,webp,gif,woff,woff2,mp4}",
lambda route: route.abort())
Si tu agente lee capturas de pantalla, mantén las imágenes en la página de destino pero aún así bloquea el vídeo y las fuentes. Si lee el DOM/árbol de accesibilidad, bloquea también las imágenes — reduce el tráfico en un 60–80%.Con bloqueo de imágenes y enrutamiento acotado, las tareas típicas de agente con navegador se ubican en el rango de 2–8 MB — a $2/GB eso son unos pocos centavos por cada cien tareas.
Sección de honestidad. Una IP residencial corrige la incoherencia de ASN y la reputación de IP, que es la señal individual de mayor peso en la puntuación antibot de 2026. No corrige:
requests. Consulta JA3/JA4 explicados.Apila las tres sobre una IP residencial y los agentes con navegador pasan las mismas verificaciones que los usuarios reales. Para los objetivos más difíciles (DataDome, PerimeterX), consulta nuestra guía de DataDome/PerimeterX.
timezone_id/locale con el país del proxy.500MB de tráfico gratis — suficiente para varios cientos de tareas de agente con navegador y bloqueo de recursos activado.
Comenzar prueba gratuitaLos nuevos usuarios reciben 500MB al registrarse, más un bono en la primera recarga. Oferta por tiempo limitado.