Интеграции

Необнаруженный ChromeDriver с интеграцией CaptchaAI

undetected-chromedriver — это библиотека Python, которая исправляет ChromeDriver Selenium для уменьшения сигналов обнаружения ботов. Он обрабатывает сопоставление версий Chrome, удаляет флаги сигнал WebDriver и изменяет другие сигналы браузера браузера, которые проверяют сайты. Если сайт по-прежнему отображает CAPTCHA, несмотря на меры предсказуемая конфигурация браузера, CaptchaAI решает ее и возвращает токен, который вы вводите на страницу.

В этом руководстве показано, как объединить оба инструмента — используйте undetected-chromedriver для скрытого просмотра и CaptchaAI для любых CAPTCHA, которые все еще появляются.


Что вам нужно

Требование Подробности
CaptchaAI API-ключ captchaai.com
Питон 3.8+
Браузер Chrome Установлен в вашей системе

Установите зависимости:

pip install undetected-chromedriver requests

Базовая настройка

import undetected_chromedriver as uc
import requests
import time


def create_stealth_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

Решение reCAPTCHA v2 в скрытом сеансе

Шаг 1. Найдите и извлеките ключ сайта.

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

Шаг 2. Решите с помощью 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")

Шаг 3. Вставьте токен и отправьте его.

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

Полный рабочий процесс: вход с помощью 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://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()

Решение Cloudflare Turnstile

Для сайтов с виджетами Cloudflare Turnstile извлеките ключ сайта и решите с помощью метода Cloudflare 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}";
    ''')

Поиск неисправностей

Проблема Причина Исправить
Несоответствие версии Chrome UC не может найти подходящий драйвер Обновите Chrome или укажите version_main в uc.Chrome().
CAPTCHA все еще появляется На сайте используется расширенная технология снятия сигналы браузера Это ожидаемо — решите с помощью CaptchaAI.
передача токена во внутренний QA endpoint не удалось Неправильный идентификатор элемента или обратный вызов Проверьте реализацию reCAPTCHA на странице.
WebDriverException Chrome разбился Добавьте --no-sandbox и --disable-dev-shm-usage.

Часто задаваемые вопросы

Зачем использовать undetected-chromedriver с CaptchaAI?

Undetected-chromedriver уменьшает сигналы обнаружения ботов, поэтому появляется меньше CAPTCHA. Когда CAPTCHA все еще срабатывает, CaptchaAI решает их. Комбинация дает самый высокий показатель успеха.

Работает ли undetected-chromedriver в headless-режиме?

Да, но headless-режим может вызвать больше CAPTCHA. Используйте options.add_argument("--headless=new") для нового headless режима Chrome.

Могу ли я использовать это с Selenium Grid?

Да, но undetected-chromedriver необходимо исправить двоичный файл локального драйвера. Для распределенных установок предварительно исправьте драйвер на каждом узле.

Что, если сайт обнаружит автоматизацию, несмотря на UC?

Некоторые сайты используют расширенное обнаружение помимо патчей UC. CaptchaAI обрабатывает полученные CAPTCHA независимо от метода обнаружения.


Добавьте CaptchaAI в систему автоматизации вашего браузера

Получите ключ API по адресуcaptchaai.com. Объедините скрытный просмотр с надежным решением CAPTCHA.


Связанные руководства

  • Как решить reCAPTCHA v2 с помощью API
  • Как решить Cloudflare Turnstile с помощью API
  • Puppeteer стандартная конфигурация браузера + CaptchaAI
  • headless-режим и headed Chrome для решения CAPTCHA
Комментарии для этой статьи отключены.