Tratamento de eventos CAPTCHA

Descubra como o Unblocking Browser captura e trata eventos de CAPTCHA.

A Oxylabs oferece duas maneiras de monitorar o processo de resolução de CAPTCHA. Enquanto o registro no console está atualmente disponível, ele é programado para descontinuação. Recomendamos fortemente usar o Método Baseado em Eventos para todos os novos projetos para garantir compatibilidade a longo prazo e sincronização de automação mais confiável.

Método Baseado em Eventos (Recomendado)

Este método permite que seu script escute mensagens personalizadas enviadas diretamente pela extensão. É mais robusto do que observar logs, pois evita problemas com limites do buffer do console ou filtragem de logs.

Como funciona

A extensão envia uma mensagem para o window objeto do navegador. Você pode capturá-las adicionando um listener de evento "message".

oxylabs-captcha-solve-start

O CAPTCHA foi detectado e a resolução foi iniciada.

oxylabs-captcha-solve-end

O CAPTCHA foi resolvido com sucesso.

oxylabs-captcha-solve-error

O auto-solver falhou ao contornar o CAPTCHA.

Você pode se inscrever nesses eventos para pausar sua automação e retomar somente depois que o CAPTCHA for tratado com sucesso. Normalmente, a resolução de CAPTCHA leva até 30 segundos, dependendo do tipo e da complexidade do CAPTCHA, mas em alguns casos pode demorar mais, então permita tempo para a conclusão da resolução do CAPTCHA.

Exemplos de código

import sys
from playwright.sync_api import sync_playwright

# Configuration
EXTENSION_NAME = 'oxylabs-runtime'
CAPTCHA_SOLVE_END = 'oxylabs-captcha-solve-end'
CAPTCHA_SOLVE_ERROR = 'oxylabs-captcha-solve-error'
UB_BROWSER_URL = 'wss://<username>:<password>@ubc.oxylabs.io'
CAPTCHA_CHECK_TIMEOUT_SEC = 60
TARGET_URL = 'https://www.indeed.com/cmp/Bank-of-the-West/reviews?lang=any&fcountry=ALL&sort=date'

def run():
    with sync_playwright() as p:
        print('Opening browser page...')
        # Connect to the remote browser using CDP
        browser = p.chromium.connect_over_cdp(UB_BROWSER_URL)
        
        # Get the default context and create a new page
        ctx = browser.contexts[0]
        page = ctx.new_page()

        # This must be done BEFORE navigation.
        ctx.add_init_script(f"""
            window.addEventListener("message", (event) => {{
                if (event.data && event.data.source === "{EXTENSION_NAME}") {{
                    window.__extensionStatus = event.data.type;
                }}
            }});
        """)

        print('Opening target website...')
        page.goto(TARGET_URL, wait_until='domcontentloaded')

        try:
            # Wait for the extension status to change
            page.wait_for_function(
                """
                ([solveEnd, solveError]) => {
                    const status = window.__extensionStatus;
                    if (status === solveError) {
                        throw new Error("CAPTCHA solving failed");
                    }
                    return status === solveEnd;
                }
                """,
                arg=[CAPTCHA_SOLVE_END, CAPTCHA_SOLVE_ERROR],
                timeout=CAPTCHA_CHECK_TIMEOUT_SEC * 1000
            )
            print('CAPTCHA solved successfully, continue scraping...')
            
        except Exception as err:
            print(f'Error during CAPTCHA solve: {err}')
            browser.close()
            sys.exit(1)

        page.wait_for_selector('h1[data-testid="PageHeader-title-reviews"]')
        page.screenshot(path='page_screenshot.jpg')

        page.close()
        browser.close()
        print('Done.')

if __name__ == "__main__":
    run()

Console Log Method (Legacy)

triangle-exclamation

A Oxylabs registra uma mensagem no console quando um CAPTCHA é detectado e está no processo de ser resolvido. As seguintes mensagens podem ser impressas no log do console:

oxylabs-captcha-solve-start

Disparado quando nosso sistema detectou o CAPTCHA e começou a resolvê-lo.

oxylabs-captcha-solve-end

Disparado quando o auto-solver resolveu com sucesso o CAPTCHA.

oxylabs-captcha-solve-error

Disparado quando o auto-solver falhou ao resolver o CAPTCHA.

Você pode se inscrever nesses eventos para pausar sua automação e retomar somente depois que o CAPTCHA for tratado com sucesso. Normalmente a resolução de CAPTCHA leva até 30 segundos dependendo do tipo e da complexidade do CAPTCHA, mas em alguns casos pode levar mais tempo, então permita tempo para a conclusão da resolução do CAPTCHA.

Confira o exemplo abaixo de como esses eventos podem ser tratados.

Atualizado

Isto foi útil?