Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти reCAPTCHA v3 Enterprise на сайте Lidl

Грегори Фишер
Грегори Фишер

Технический специалист

Страница авторизации Lidl (accounts.lidl.com) защищена невидимой капчей reCAPTCHA v3 в конфигурации Enterprise. Главная особенность работы с этой капчей заключается в том, что она не требует взаимодействия с пользователем, но строго оценивает человечность действий.

Для успешного решения критически важно передать правильные флаг isEnterprise, а также подобрать корректный параметр minScore. Если сайт отклоняет полученный токен, первое, что нужно сделать — изменить значение minScore в запросе к API. Также важно помнить, что для задач reCAPTCHA v3 в нашем сервисе прокси не поддерживаются, необходимо использовать исключительно тип задачи RecaptchaV3TaskProxyless.

Параметры задачи

Для решения используется тип задачи RecaptchaV3TaskProxyless.

Параметр Тип Обязательный Описание
type String Да Должен быть установлен в RecaptchaV3TaskProxyless
websiteURL String Да Полный URL страницы, где находится капча (включая все query-параметры)
websiteKey String Да Статический ключ сайта (начинается с 6L...)
minScore Float Да Минимальный требуемый скор (например, 0.3, 0.7, 0.9). Если токен не принимается сайтом, измените это значение.
isEnterprise Boolean Да Должно быть установлено в true для корпоративной версии reCAPTCHA
apiDomain String Да Домен API. Для Lidl обычно используется www.recaptcha.net

Как найти параметры

  1. Откройте страницу входа Lidl: https://www.lidl.com/ и перейдите к форме авторизации.
  2. Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
  3. Включите сохранение логов (Preserve log).
  4. Введите тестовые данные и нажмите кнопку входа, чтобы инициировать проверку.
  5. В фильтре вкладки Сеть введите recaptcha или enterprise.
  6. Найдите запрос к серверам Google. В параметрах этого запроса (или в исходном коде страницы по поиску data-sitekey) вы найдете значение websiteKey (например, 6LdL-lsaAAAAABo0b2M_cFQbrX0Btbo85uZdRXWS).
  7. Важно: Скопируйте полный URL из адресной строки браузера в момент отправки запроса. Он содержит важные параметры сессии (например, state, transaction_id).
  8. Проверьте исходный код страницы или payload запроса, чтобы убедиться, что используется isEnterprise: true и apiDomain: www.recaptcha.net.

Примеры кода

Python + requests

Пример отправки задачи и опроса результата с использованием библиотеки requests.

python Copy
import requests
import time

API_KEY = 'ВАШ_API_КЛЮЧ'
WEBSITE_URL = 'https://accounts.lidl.com/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fcountry_code%3DUS%26response_type%3Dcode%26client_id%3DUsaRetailClient%26scope%3Dopenid%2520profile%2520Lidl.Authentication%2520offline_access%26state%3DIFq8BVFUX0qvLy_8qwJRfZx4y8hhyvm0ZdRLIQx1l4g%253D%26redirect_uri%3Dhttps%253A%252F%252Fwww.lidl.com%252Fuser-api%252Fsignin-oidc%26nonce%3DhIXSo9hQoVeh2jESuulV_0vdzkKPa0Tj2bAUW6QSePk%26code_challenge%3DUk_ogCwFo0qP_9b7pppeOnD6wKXCYs3hzXuPPuW-ZKc%26code_challenge_method%3DS256%26step%3Dlogin%26language%3Den-US%26transaction_id%3Dc9f3c914-e3a4-4ee9-916e-bae36d4c6ad8#login'
WEBSITE_KEY = '6LdL-lsaAAAAABo0b2M_cFQbrX0Btbo85uZdRXWS'

# 1. Отправка задачи
url = 'https://api.2captcha.com/createTask'
headers = {
    'Content-Type': 'application/json'
}
payload = {
    "clientKey": API_KEY,
    "task": {
        "type": "RecaptchaV3TaskProxyless",
        "websiteURL": WEBSITE_URL,
        "websiteKey": WEBSITE_KEY,
        "minScore": 0.3,
        "apiDomain": "www.recaptcha.net",
        "isEnterprise": True
    }
}

response = requests.post(url, headers=headers, json=payload)
result = response.json()

if result.get('errorId') == 0:
    task_id = result.get('taskId')
    print(f"Задача создана, ID: {task_id}")
    
    # 2. Ожидание решения
    res_url = 'https://api.2captcha.com/getTaskResult'
    while True:
        time.sleep(5)
        
        res_payload = {
            "clientKey": API_KEY,
            "taskId": task_id
        }
        
        res_response = requests.post(res_url, headers=headers, json=res_payload).json()
        
        if res_response.get('errorId') == 0 and res_response.get('status') == 'ready':
            print("Капча успешно решена!")
            token = res_response['solution']['gRecaptchaResponse']
            print(f"Токен: {token}")
            break
        elif res_response.get('errorId') != 0:
            print(f"Ошибка при получении результата: {res_response.get('errorDescription')}")
            break
else:
    print(f"Ошибка создания задачи: {result.get('errorDescription')}")

Python + Playwright

Пример автоматизации, который динамически извлекает текущий URL и ключ, отправляет задачу и получает токен.

python Copy
from playwright.sync_api import sync_playwright
import requests
import time

API_KEY = 'ВАШ_API_КЛЮЧ'
TARGET_URL = 'https://www.lidl.com/'

def solve_lidl_recaptcha_v3():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        
        try:
            page.goto(TARGET_URL)
            page.wait_for_url('**/accounts.lidl.com/**', timeout=15000)
            
            current_url = page.url
            website_key = page.evaluate("document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')")
            
            if not website_key:
                website_key = page.evaluate("""
                    () => {
                        const scripts = document.querySelectorAll('script');
                        for (const script of scripts) {
                            const match = script.textContent.match(/sitekey['":\s]+['"]?(6L[a-zA-Z0-9_-]{39})['"]?/);
                            if (match) return match[1];
                        }
                        return null;
                    }
                """)

            print(f"URL: {current_url}")
            print(f"Key: {website_key}")
            
            api_url = 'https://api.2captcha.com/createTask'
            headers = {'Content-Type': 'application/json'}
            payload = {
                "clientKey": API_KEY,
                "task": {
                    "type": "RecaptchaV3TaskProxyless",
                    "websiteURL": current_url,
                    "websiteKey": website_key,
                    "minScore": 0.3,
                    "apiDomain": "www.recaptcha.net",
                    "isEnterprise": True
                }
            }
            
            task_response = requests.post(api_url, headers=headers, json=payload).json()
            task_id = task_response.get('taskId')
            
            res_url = 'https://api.2captcha.com/getTaskResult'
            token = None
            for _ in range(20):
                time.sleep(5)
                res = requests.post(res_url, headers=headers, json={"clientKey": API_KEY, "taskId": task_id}).json()
                if res.get('status') == 'ready':
                    token = res['solution']['gRecaptchaResponse']
                    break
                if res.get('errorId') != 0:
                    print(f"Ошибка API: {res.get('errorDescription')}")
                    break
                    
            if token:
                print(f"Токен получен: {token[:30]}...")
            else:
                print("Не удалось получить токен.")
                
        except Exception as e:
            print(f"Ошибка: {e}")

if __name__ == '__main__':
    solve_lidl_recaptcha_v3()

Как использовать полученный токен (Внедрение без callback)

В отличие от reCAPTCHA v2, версия v3 не использует callback-функции для передачи результата. Токен должен быть передан на сервер явным образом. На сайте Lidl это обычно реализуется следующим способом:

Скрытое поле формы: Сайт автоматически считывает значение из скрытого input с именем g-recaptcha-response при отправке формы.

python Copy
page.evaluate(f"""
    let input = document.querySelector('input[name="g-recaptcha-response"]');
    if (!input) {{
        input = document.createElement('input');
        input.type = 'hidden';
        input.name = 'g-recaptcha-response';
        const form = document.querySelector('form') || document.body;
        form.appendChild(input);
    }}
    input.value = "{token}";
""")

Если форма отправляется через JavaScript (Fetch/XHR), токен может не читаться из DOM, а формироваться в объекте данных. В этом случае вам нужно перехватить запрос на отправку формы и добавить поле gRecaptchaResponse в тело запроса перед его отправкой на сервер.

Тестирование в режиме песочницы

Перед запуском автоматизации проверьте корректность извлеченных параметров в Песочнице 2captcha.

  1. Отправьте задачу через API, используя ваш websiteURL, websiteKey, minScore, apiDomain и isEnterprise.
  2. Перейдите в Песочницу https://2captcha.com/setting#sandbox и переключитесь в режим Работник (Worker).
  3. Если вы получите эту задачу и увидите корректно загружающийся виджет reCAPTCHA v3 Enterprise, значит, параметры собраны верно. Если виджет выдает ошибку, проверьте точное совпадение websiteURL и apiDomain.

Частые ошибки и решения

Ошибка / Проблема Причина Решение
Сайт отклоняет токен Значение minScore не соответствует требованиям сайта. Измените параметр minScore в запросе к API. Попробуйте значения 0.1, 0.3, 0.5, 0.7 или 0.9.
Ошибка, связанная с прокси Использование прокси для reCAPTCHA v3. Для reCAPTCHA v3 прокси не поддерживаются. Всегда используйте тип задачи RecaptchaV3TaskProxyless.
ERROR_INVALID_SITE_KEY Неверный websiteKey или несоответствие домена в websiteURL. Убедитесь, что ключ начинается с 6L, а websiteURL точно совпадает с адресом в браузере, включая все параметры.
Токен не принимается формой Неверный способ внедрения токена. Убедитесь, что вы не пытаетесь использовать callback. Внедрите токен в скрытое поле g-recaptcha-response или добавьте его в payload запроса.

Полезные ссылки