> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/products/es/headless-browser/gestion-de-captcha.md).

# Gestión de CAPTCHA

De forma predeterminada, Oxylabs Headless Browser detecta y gestiona automáticamente los CAPTCHA en cuanto se carga una página. No se requiere configuración ni ajuste de parámetros.&#x20;

Si un sitio objetivo muestra desafíos de forma dinámica durante interacciones de varios pasos, o si necesita supervisión avanzada de eventos y optimizaciones de velocidad, puede usar los parámetros, eventos y técnicas documentados a continuación.

{% hint style="info" %}
**Nota:** Las tasas de éxito de acceso dependen mucho del objetivo. Los resultados pueden variar según la configuración específica del sitio objetivo, los niveles de aplicación (por ejemplo, seguimiento pasivo de huellas digitales frente a escalada activa de desafíos) y la reputación en tiempo real de la IP residencial de la sesión.
{% endhint %}

## Supervisión de eventos CAPTCHA

Puede supervisar el ciclo de vida del solucionador. El interno `oxylabs-runtime` la extensión del navegador transmite eventos de estado directamente al `window` objeto. Al registrar un listener de evento personalizado "message", su script puede rastrear estos eventos para pausar y reanudar acciones.

<table><thead><tr><th width="243">Tipo de evento</th><th>Descripción</th></tr></thead><tbody><tr><td><code>oxylabs-captcha-start</code></td><td>El solucionador ha detectado un CAPTCHA e iniciado el proceso de gestión.</td></tr><tr><td><code>oxylabs-captcha-end</code></td><td>El solucionador se completó correctamente y gestionó el desafío.</td></tr><tr><td><code>oxylabs-captcha-solve-end</code></td><td>Evento de finalización alternativo emitido después del éxito.</td></tr><tr><td><code>oxylabs-captcha-error</code></td><td>El solucionador no pudo gestionar el desafío.</td></tr></tbody></table>

{% hint style="info" %}
La resolución automática está **habilitada de forma predeterminada**. Si añade `solve_captcha=false` a su URL de conexión, la gestión automática se desactiva y estos eventos no se emitirán.
{% endhint %}

### 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 la gestión activa.

{% tabs %}
{% tab title="Python (Playwright)" %}

```python
from playwright.sync_api import sync_playwright

username = "USERNAME_abc12"
password = "PASSWORD"
endpoint = "ubc.oxylabs.io"
# Ensure solve_captcha=true is active (default) to emit events
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()
```

{% endtab %}

{% tab title="JavaScript (Playwright)" %}

```javascript
import { chromium } from "playwright";

const username = "USERNAME_abc12";
const password = "PASSWORD";
const endpoint = "ubc.oxylabs.io";
const browserUrl = `wss://${username}:${password}@${endpoint}?solve_captcha=true`;

(async () => {
    const browser = await chromium.connectOverCDP(browserUrl);
    const ctx = browser.contexts()[0];
    const page = await ctx.newPage();

    // Register init script to listen for oxylabs-runtime events
    await ctx.addInitScript(() => {
        window.addEventListener("message", (e) => {
            if (e.data?.source === "oxylabs-runtime") {
                window.__extensionStatus = e.data.type;
            }
        });
    });

    await page.goto("https://example.com/captcha-page", { waitUntil: "domcontentloaded" });

    try {
        // Halt script execution until CAPTCHA returns positive solve status
        await page.waitForFunction(() => {
            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";
        }, null, { timeout: 60000 });

        console.log("CAPTCHA solved. Resuming automation...");
    } catch (err) {
        console.error("Error during bypass execution:", err.message);
    } finally {
        await browser.close();
    }
})();
```

{% endtab %}

{% tab title="JavaScript (Puppeteer)" %}

```javascript
import puppeteer from "puppeteer";

const username = "USERNAME_abc12";
const password = "PASSWORD";
const endpoint = "ubc.oxylabs.io";
const browserUrl = `wss://${username}:${password}@${endpoint}?solve_captcha=true`;

(async () => {
    const browser = await puppeteer.connect({ browserWSEndpoint: browserUrl });
    const page = await browser.newPage();

    // Puppeteer alternative: Evaluate on document creation
    await page.evaluateOnNewDocument(() => {
        window.addEventListener("message", (e) => {
            if (e.data?.source === "oxylabs-runtime") {
                window.__extensionStatus = e.data.type;
            }
        });
    });

    await page.goto("https://example.com/captcha-page", { waitUntil: "domcontentloaded" });

    try {
        await page.waitForFunction(() => {
            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 });

        console.log("CAPTCHA solved. Resuming automation...");
    } catch (err) {
        console.error("Error during bypass execution:", err.message);
    } finally {
        await browser.close();
    }
})();
```

{% endtab %}
{% endtabs %}

## Disparadores manuales dinámicos

Algunos objetivos solo muestran desafíos CAPTCHA después de acciones del usuario (por ejemplo, tras hacer clic en un botón interactivo de envío de formulario o realizar un desplazamiento dinámico).&#x20;

Puede activar el manejador de CAPTCHA de Headless Browser de forma programática en cualquier momento de su sesión usando `window.postMessage` el evento directamente al objeto window:

```
window.postMessage({ action: "solve_captcha", type: "type_name" }, "*");
```

{% hint style="info" %}
Para obtener más información sobre los tipos de CAPTCHA compatibles, póngase en contacto con el soporte de Oxylabs ([chat en vivo](https://oxylabs.io/) o [correo electrónico](mailto:support@oxylabs.io)) o con su gerente de cuenta dedicado.
{% endhint %}

### Patrón de activación estándar

Para elementos típicos, active el solucionador inmediatamente después de ejecutar la acción del usuario:

```javascript
// Perform form interaction
await page.click("#form-submit-button");

// Trigger solving for late-stage CAPTCHA
await page.evaluate(() => {
    window.postMessage({ action: "solve_captcha", type: "type_name" }, "*");
});
```

{% hint style="info" %}
Para obtener más información sobre los tipos de CAPTCHA compatibles o las excepciones para tipos específicos, póngase en contacto con el soporte de Oxylabs ([chat en vivo](https://oxylabs.io/) o [correo electrónico](mailto:support@oxylabs.io)) o con su gerente de cuenta dedicado para más detalles.
{% endhint %}

## Optimización de velocidad

La gestión de CAPTCHA añade latencia de ejecución mecánica. Al extraer datos de objetivos que imponen barreras CAPTCHA repetitivas, considere estos métodos para mejorar el rendimiento:

<table data-header-hidden><thead><tr><th width="175"></th><th></th></tr></thead><tbody><tr><td><strong>Reutilizar sesiones</strong></td><td>Una vez que una sesión de navegador remota 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 del navegador sin volver a activar las rutinas de resolución del desafío.</td></tr><tr><td><strong>Múltiples pestañas</strong> </td><td>En lugar de conexiones WebSocket separadas (que inician sandboxes distintas con pools vacíos de cookie), 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.</td></tr><tr><td><strong>Desactivación adaptable</strong></td><td>Una vez que se haya establecido una señal fiable de confianza de la sesión, desactive las comprobaciones del solucionador en segundo plano con <code>solve_captcha=false</code>, para evitar la latencia de inicialización del proceso en dominios donde sus sesiones ya pasan sin problemas.</td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/products/es/headless-browser/gestion-de-captcha.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
