Integrações

ChromeDriver não detectado com integração CaptchaAI

undetected-chromedriver é uma biblioteca Python que corrige o ChromeDriver do Selenium para reduzir sinais de detecção de bot. Ele lida com a correspondência de versões do Chrome, remove sinalizadores sinal de navegador automatizado e modifica outras impressões digitais do navegador que os sites verificam. Quando um site ainda apresenta um CAPTCHA apesar das medidas controle de QAs, CaptchaAI resolve e retorna um token que você injeta na página.

Este guia mostra como combinar as duas ferramentas – use o undetected-chromedriver para navegação controle de QA e CaptchaAI para quaisquer CAPTCHAs que ainda apareçam.


O que você precisa

Requisito Detalhes
Chave de API CaptchaAI captchaai.com
Python 3.8+
Navegador Chrome Instalado em seu sistema

Instale dependências:

pip install undetected-chromedriver requests

Configuração básica

import undetected_chromedriver as uc
import requests
import time


def create_qa_browser_browser():
    """Create an undetected Chrome browser instance."""
    options = uc.ChromeOptions()
    options.add_argument("--no-sandbox")
    options.add_argument("--window-size=1920,1080")

    driver = uc.Chrome(options=options)
    return driver

Resolvendo reCAPTCHA v2 em uma sessão controle de QA

Etapa 1: navegue e extraia a chave do site

API_KEY = "YOUR_API_KEY"


def extract_recaptcha_sitekey(driver):
    """Extract reCAPTCHA v2 sitekey from the page."""
    try:
        element = driver.find_element("css selector", "[data-sitekey]")
        return element.get_attribute("data-sitekey")
    except Exception:
        # Try finding in iframe src
        iframes = driver.find_elements("css selector", "iframe[src*='recaptcha']")
        for iframe in iframes:
            src = iframe.get_attribute("src")
            if "k=" in src:
                return src.split("k=")[1].split("&")[0]
    return None

Etapa 2: Resolva com CaptchaAI

def solve_recaptcha_v2(sitekey, pageurl):
    """Submit reCAPTCHA v2 to CaptchaAI and return the token."""
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]

    time.sleep(20)
    for _ in range(30):
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result['request']}")
        time.sleep(5)

    raise TimeoutError("Solve timed out")

Etapa 3: injetar o token e enviar

def inject_recaptcha_token(driver, token):
    """Inject the solved token into the page and submit."""
    driver.execute_script(f'''
        document.getElementById("g-recaptcha-response").innerHTML = "{token}";
        document.getElementById("g-recaptcha-response").style.display = "block";
    ''')

    # If there's a callback function, trigger it
    driver.execute_script(f'''
        if (typeof ___grecaptcha_cfg !== 'undefined') {{
            var clients = ___grecaptcha_cfg.clients;
            for (var key in clients) {{
                var client = clients[key];
                if (client && client.callback) {{
                    client.callback("{token}");
                }}
            }}
        }}
    ''')

Fluxo de trabalho completo: Faça login com reCAPTCHA

import undetected_chromedriver as uc
import requests
import time

API_KEY = "YOUR_API_KEY"


def solve_recaptcha(sitekey, pageurl):
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": sitekey, "pageurl": pageurl, "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]
    time.sleep(20)

    for _ in range(30):
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result['request']}")
        time.sleep(5)
    raise TimeoutError("Solve timed out")


def main():
    driver = uc.Chrome()

    try:
        # Navigate to target page
        driver.get("https://staging.example.com/qa-login")
        time.sleep(3)

        # Fill in form fields
        driver.find_element("id", "username").send_keys("user")
        driver.find_element("id", "password").send_keys("pass")

        # Extract sitekey
        element = driver.find_element("css selector", "[data-sitekey]")
        sitekey = element.get_attribute("data-sitekey")
        pageurl = driver.current_url
        print(f"Sitekey: {sitekey}")

        # Solve CAPTCHA
        token = solve_recaptcha(sitekey, pageurl)
        print(f"Token: {token[:50]}...")

        # Inject token
        driver.execute_script(
            f'document.getElementById("g-recaptcha-response").innerHTML = "{token}";'
        )

        # Submit form
        driver.find_element("id", "submit-btn").click()
        time.sleep(3)

        print(f"Current URL: {driver.current_url}")
    finally:
        driver.quit()


if __name__ == "__main__":
    main()

Resolvendo Cloudflare Turnstile

Para sites com widgets Cloudflare Turnstile, extraia o sitekey e resolva através do método Turnstile:

def solve_turnstile(sitekey, pageurl):
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "turnstile",
        "sitekey": sitekey, "pageurl": pageurl, "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]
    time.sleep(10)

    for _ in range(30):
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result['request']}")
        time.sleep(5)
    raise TimeoutError("Solve timed out")


# Inject Turnstile token
def inject_turnstile_token(driver, token):
    driver.execute_script(f'''
        var input = document.querySelector('[name="cf-turnstile-response"]');
        if (input) input.value = "{token}";
    ''')

Solução de problemas

Problema Causa Correção
Incompatibilidade de versão do Chrome UC não consegue encontrar driver correspondente Atualize o Chrome ou especifique version_main em uc.Chrome()
CAPTCHA ainda aparece Site usa sinal de navegador avançada Isso é esperado – resolva com CaptchaAI
A envio controlado ao endpoint QA falha ID de elemento ou retorno de chamada incorreto Verifique a implementação do reCAPTCHA da página
WebDriverException O Chrome travou Adicione --no-sandbox e --disable-dev-shm-usage

Perguntas frequentes

Por que usar o chromedriver não detectado com CaptchaAI?

O Undetected-chromedriver reduz os sinais de detecção de bot para que apareçam menos CAPTCHAs. Quando os CAPTCHAs ainda são acionados, CaptchaAI os resolve. A combinação dá a maior taxa de sucesso.

O chromedriver não detectado funciona no modo headless?

Sim, mas o modo headless pode acionar mais CAPTCHAs. Use options.add_argument("--headless=new") para o novo modo modo headless do Chrome.

Posso usar isso com Selenium Grid?

Sim, mas o undetected-chromedriver precisa corrigir o binário do driver local. Para configurações distribuídas, pré-atualize o driver em cada nó.

E se o site detectar automação apesar da UC?

Alguns sites usam detecção avançada além dos patches de UC. CaptchaAI lida com os CAPTCHAs resultantes independentemente do método de detecção.


Adicione CaptchaAI à automação do seu navegador

Obtenha sua chave API emcaptchaai.com. Combine navegação controle de QA com resolução confiável de CAPTCHA.


Guias relacionados

Os comentários estão desativados para este artigo.