Эта статья была полезной?
Как обойти 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 |
Как найти параметры
- Откройте страницу входа Lidl: https://www.lidl.com/ и перейдите к форме авторизации.
- Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
- Включите сохранение логов (Preserve log).
- Введите тестовые данные и нажмите кнопку входа, чтобы инициировать проверку.
- В фильтре вкладки Сеть введите recaptcha или enterprise.
- Найдите запрос к серверам Google. В параметрах этого запроса (или в исходном коде страницы по поиску data-sitekey) вы найдете значение websiteKey (например, 6LdL-lsaAAAAABo0b2M_cFQbrX0Btbo85uZdRXWS).
- Важно: Скопируйте полный URL из адресной строки браузера в момент отправки запроса. Он содержит важные параметры сессии (например, state, transaction_id).
- Проверьте исходный код страницы или payload запроса, чтобы убедиться, что используется isEnterprise: true и apiDomain: www.recaptcha.net.
Примеры кода
Python + requests
Пример отправки задачи и опроса результата с использованием библиотеки requests.
python
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
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
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.
- Отправьте задачу через API, используя ваш websiteURL, websiteKey, minScore, apiDomain и isEnterprise.
- Перейдите в Песочницу https://2captcha.com/setting#sandbox и переключитесь в режим Работник (Worker).
- Если вы получите эту задачу и увидите корректно загружающийся виджет 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 запроса. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация API по reCAPTCHA v3: https://2captcha.com/api-docs/recaptcha-v3
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://2captcha.com/h?category=sites