Integraciones

ChromeDriver no detectado con integración CaptchaAI

undetected-chromedriver es una biblioteca de Python que gestiona la compatibilidad de versiones de ChromeDriver para Selenium. Cuando un sitio presenta un CAPTCHA durante la automatización, CaptchaAI lo resuelve y devuelve un token que usted inyecta en la página.

Esta guía muestra cómo combinar ambas herramientas: use undetected-chromedriver para la automatización del navegador con Selenium y CaptchaAI para resolver cualquier CAPTCHA que aparezca.


lo que necesitas

Requisito Detalles
Clave API CaptchaAI captchaai.com
Python 3.8+
Navegador Chrome Instalado en su sistema

Instalar dependencias:

pip install undetected-chromedriver requests

Configuración básica

import undetected_chromedriver as uc
import requests
import time


def create_browser():
    """Create a 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

Resolviendo reCAPTCHA v2 con Selenium y CaptchaAI

Paso 1: navegue y extraiga la clave del sitio

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

Paso 2: Resuelve con 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")

Paso 3: inyecta el token y envíalo

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}");
                }}
            }}
        }}
    ''')

Flujo de trabajo completo: inicie sesión con 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()

Resolviendo Cloudflare Turnstile

Para sitios con widgets Cloudflare Turnstile, extraiga la clave del sitio y resuelva mediante el 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}";
    ''')

Solución de problemas

Problema causa Solución
La versión de Chrome no coincide UC no puede encontrar el controlador correspondiente Actualice Chrome o especifique version_main en uc.Chrome()
CAPTCHA todavía aparece El sitio requiere resolución de CAPTCHA Integre CaptchaAI para resolver cualquier CAPTCHA automáticamente.
La inyección de token falla ID de elemento incorrecto o devolución de llamada Verifique la implementación reCAPTCHA de la página
WebDriverException Chrome falló Añadir --no-sandbox y --disable-dev-shm-usage

Preguntas frecuentes

¿Por qué utilizar el controlador Chrome no detectado con CaptchaAI?

Chromedriver no detectado reduce las señales de detección de bots, por lo que aparecen menos CAPTCHA. Cuando los CAPTCHA todavía se activan, CaptchaAI los resuelve. La combinación proporciona la mayor tasa de éxito.

¿Funciona el controlador de cromo no detectado en modo sin cabeza?

Sí, pero el modo sin cabeza puede activar más CAPTCHA. Utilice options.add_argument("--headless=new") para el nuevo modo sin cabeza de Chrome.

¿Puedo usar esto con Selenium Grid?

Sí, pero el controlador cromado no detectado necesita parchear el binario del controlador local. Para configuraciones distribuidas, aplique parches previos al controlador en cada nodo.

¿Qué pasa si el sitio detecta automatización a pesar de las UC?

Algunos sitios utilizan detección avanzada más allá de los parches de UC. CaptchaAI maneja los CAPTCHA resultantes independientemente del método de detección.


Agregue CaptchaAI a la automatización de su navegador

Obtenga su clave API encaptchaai.com. Combine la automatización del navegador con la resolución confiable de CAPTCHA con CaptchaAI.


Guías relacionadas

  • Cómo resolver reCAPTCHA v2 usando API
  • Cómo resolver Cloudflare Turnstile usando API
  • Puppeteer + CaptchaAI
  • Chrome en modo headless o con cabeza para resolver CAPTCHA
Los comentarios están deshabilitados para este artículo.