Gestión de CAPTCHA
Aprende sobre los mecanismos de detección y gestión de CAPTCHA de Headless Browser y cómo usarlos.
De forma predeterminada, Oxylabs Headless Browser hace no no maneja CAPTCHAs automáticamente. Para habilitar la detección y el manejo automáticos tan pronto como se cargue una página, agregue solve_captcha=true a la URL de conexión.
Si un sitio de destino muestra desafíos dinámicamente durante interacciones de varios pasos, o si requiere supervisión avanzada de eventos y optimizaciones de velocidad, puede usar los parámetros, eventos y técnicas documentados a continuación.
Monitoreo de eventos de CAPTCHA
Puede supervisar el ciclo de vida del solucionador. La extensión interna oxylabs-runtime del navegador transmite eventos de estado directamente al window objeto del navegador. Al registrar un escuchador de eventos personalizado "message", su script puede rastrear estos eventos para pausar y reanudar acciones.
oxylabs-captcha-start
El solucionador ha detectado un CAPTCHA e inició el proceso de manejo.
oxylabs-captcha-end
El solucionador se completó con éxito y manejó el desafío.
oxylabs-captcha-solve-end
Evento de finalización alternativo emitido después del éxito.
oxylabs-captcha-error
El solucionador no pudo manejar el desafío.
Ejemplos de código
Estos ejemplos muestran cómo inyectar un init script para capturar eventos CAPTCHA en tiempo de ejecución antes de la navegación de la página, de modo que su script se pause durante el manejo activo.
from playwright.sync_api import sync_playwright
username = "USERNAME_abc12"
password = "PASSWORD"
endpoint = "hb.oxylabs.io"
# solve_captcha=true enables handling and event emission (off by default)
browser_url = f"wss://{username}:{password}@{endpoint}?solve_captcha=true"
def run():
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(browser_url)
ctx = browser.contexts[0]
page = ctx.new_page()
# Inject listener BEFORE navigation
ctx.add_init_script("""
window.addEventListener("message", (event) => {
if (event.data && event.data.source === "oxylabs-runtime") {
window.__extensionStatus = event.data.type;
}
});
""")
page.goto("https://example.com/captcha-page", wait_until="domcontentloaded")
# Wait for solver to complete (polls status flag)
page.wait_for_function(
"""() => {
const status = window.__extensionStatus;
if (status === "oxylabs-captcha-error") {
throw new Error("CAPTCHA solving failed");
}
return status === "oxylabs-captcha-solve-end" || status === "oxylabs-captcha-end";
}""",
timeout=60000
)
print("CAPTCHA solved. Resuming automation...")
browser.close()
if __name__ == "__main__":
run()Desencadenadores manuales dinámicos
Algunos destinos solo muestran desafíos CAPTCHA después de acciones del usuario (p. ej., después de hacer clic en un botón interactivo de envío de formulario o de realizar un desplazamiento dinámico).
Puede activar el manejador de CAPTCHA de Headless Browser mediante programación en cualquier momento de su sesión usando window.postMessage evento directamente al objeto window:
Patrón de activación estándar
Para elementos típicos, active el solucionador inmediatamente después de ejecutar la acción del usuario:
Optimización de velocidad
El manejo de CAPTCHAs añade latencia mecánica a la ejecución. Cuando raspe destinos que aplican barreras CAPTCHA repetitivas, considere estos métodos para mejorar el rendimiento:
Reutilizar sesiones
Una vez que una sesión de navegador remoto completa un CAPTCHA en un dominio, la verificación se guarda. Navegue repetidamente o realice pasos adicionales de la página dentro de la misma sesión de navegador sin volver a activar rutinas de resolución de desafíos.
Múltiples pestañas
En lugar de conexiones WebSocket separadas (que inician sandboxes distintos con pools de cookie vacíos), ejecute tareas concurrentes abriendo varias pestañas o contextos dentro de su sesión existente, para reducir el tiempo de conexión y verificación en todas las páginas.
Habilitar de forma selectiva
Dado que solve_captcha está desactivado por defecto, habilítelo solo (solve_captcha=true) para las conexiones específicas que lo necesiten, en lugar de dejarlo activado para todo un flujo de trabajo; así se evita la latencia de inicialización del solucionador en páginas o sesiones que no se enfrenten a desafíos CAPTCHA.
Última actualización
¿Te fue útil?

