Tratamento de CAPTCHA
Saiba mais sobre os mecanismos de detecção e tratamento de CAPTCHA do Headless Browser e como usá-los.
Por padrão, Oxylabs Headless Browser não faz não lida com CAPTCHAs automaticamente. Para ativar a detecção e o tratamento automáticos assim que uma página carregar, adicione solve_captcha=true à sua URL de conexão.
Se um site-alvo exibir desafios dinamicamente durante interações em várias etapas, ou se você precisar de monitoramento avançado de eventos e otimizações de velocidade, pode usar os parâmetros, eventos e técnicas documentados abaixo.
Monitorando eventos de CAPTCHA
Você pode monitorar o ciclo de vida do resolvedor. A extensão interna oxylabs-runtime do navegador emite eventos de status diretamente para o window objeto window do navegador. Ao registrar um ouvinte personalizado do evento "message", seu script pode rastrear esses eventos para pausar e retomar ações.
oxylabs-captcha-start
O resolvedor detectou um CAPTCHA e iniciou o processo de tratamento.
oxylabs-captcha-end
O resolvedor foi concluído com sucesso e tratou o desafio.
oxylabs-captcha-solve-end
Evento alternativo de conclusão emitido após o sucesso.
oxylabs-captcha-error
O resolvedor falhou ao tratar o desafio.
Exemplos de código
Estes exemplos mostram como injetar um init script para capturar eventos de CAPTCHA em tempo de execução antes da navegação da página, para que seu script pause durante o tratamento ativo.
from playwright.sync_api import sync_playwright
username = "USERNAME_abc12"
password = "PASSWORD"
endpoint = "hb.oxylabs.io"
# solve_captcha=true ativa o tratamento e a emissão de eventos (desativado por padrão)
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()
# Injetar listener ANTES da navegação
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")
# Aguarde o resolvedor concluir (faz polling do sinalizador de status)
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()Gatilhos manuais dinâmicos
Alguns alvos só exibem desafios CAPTCHA após ações do usuário (por exemplo, depois de clicar em um botão interativo de envio de formulário ou realizar rolagem dinâmica).
Você pode acionar programaticamente o tratador de CAPTCHA do Headless Browser a qualquer momento da sua sessão usando window.postMessage evento diretamente no objeto window:
Padrão de acionamento
Para elementos típicos, acione o resolvedor imediatamente após executar a ação do usuário:
Otimização de velocidade
O tratamento de CAPTCHAs adiciona latência de execução mecânica. Ao raspar alvos que impõem verificações de CAPTCHA repetitivas, considere estes métodos para obter melhor desempenho:
Reutilizar sessões
Depois que uma sessão de navegador remoto conclui um CAPTCHA em um domínio, a verificação é salva. Navegue repetidamente ou execute etapas adicionais da página na mesma sessão do navegador sem reativar rotinas de resolução de desafios.
Múltiplas abas
Em vez de conexões WebSocket separadas (que iniciam sandboxes distintos com pools de cookie vazios), execute tarefas concorrentes abrindo várias abas ou contextos dentro da sua sessão existente, para reduzir o tempo de conexão e verificação em todas as páginas.
Ativar seletivamente
Como solve_captcha está desativado por padrão, ative-o apenas (solve_captcha=true) para as conexões específicas que precisam dele, em vez de deixá-lo ativado durante todo o fluxo de trabalho — isso evita a latência de inicialização do resolvedor em páginas ou sessões que não enfrentam desafios CAPTCHA.
Atualizado
Isto foi útil?

