Невидимая reCAPTCHA срабатывает, когда пользователь нажимает кнопку или отправляет форму — флажок отсутствует. Вызов происходит в фоновом режиме, и страница продолжает работать только после проверки токена. Решение через CaptchaAI аналогично стандартной версии v2, с одним ключевым дополнением: вы должны передать invisible=1 в своем API-запросе.
Самая большая разница в интеграции заключается в том, как вы вводите токен. Большинство невидимых реализаций используют функцию обратного вызова вместо скрытого поля g-recaptcha-response. Вам нужно найти и вызвать этот обратный вызов.
Не уверены, невидимая версия или стандартная версия v2? ЧитатьОбъяснение reCAPTCHA v2 против невидимогодля советов по обнаружению.
Что вам нужно
| Требование | Подробности |
|---|---|
| CaptchaAI API-ключ | captchaai.com/api.php |
| Ключ сайта | От data-sitekey на виджете или кнопке |
| URL страницы | Полный URL-адрес, по которому запускается невидимая CAPTCHA |
| Инструмент браузера | Selenium/Puppeteer для выполнения обратного вызова |
Шаг 1. Обнаружение невидимой reCAPTCHA
Найдите эти шаблоны в HTML-странице:
<!-- Option 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..." data-size="invisible" data-callback="onSubmit"></div>
<!-- Option 2: button with data-sitekey (invisible by default) -->
<button data-sitekey="6LdKlZEU..." data-callback="onSubmit">Submit</button>
<!-- Option 3: programmatic execution -->
<script>
grecaptcha.execute('6LdKlZEU...', {action: 'submit'});
</script>
Если вы видите data-size="invisible", кнопку с data-sitekey или grecaptcha.execute() без контейнера, это невидимая reCAPTCHA.
Шаг 2. Отправьте заявку на CaptchaAI.
import requests
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "6LdKlZEUAAAAAPoxm...",
"pageurl": "https://example.com/signup",
"invisible": 1,
"json": 1
})
task_id = response.json()["request"]
const params = new URLSearchParams({
key: "YOUR_API_KEY", method: "userrecaptcha",
googlekey: "6LdKlZEUAAAAAPoxm...",
pageurl: "https://example.com/signup",
invisible: 1, json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await res.json();
Шаг 3: Опрос на результат
import time
for _ in range(40):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
token = result["request"]
break
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Error: {result['request']}")
Шаг 4. Внедрите токен через обратный вызов.
Это решающий шаг. Невидимая reCAPTCHA ожидает функцию обратного вызова, а не просто значение скрытого поля:
# Selenium example
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com/signup")
# Find the callback name
callback = driver.execute_script("""
var el = document.querySelector('[data-callback]');
if (el) return el.getAttribute('data-callback');
var btn = document.querySelector('[data-sitekey]');
if (btn) return btn.getAttribute('data-callback');
return null;
""")
# Execute the callback with the token
if callback:
driver.execute_script(f"window['{callback}']('{token}');")
else:
# Fallback: fill hidden field and submit
driver.execute_script(f"""
document.getElementById('g-recaptcha-response').innerHTML = '{token}';
document.querySelector('form').submit();
""")
// Puppeteer example
await page.evaluate((token) => {
const el = document.querySelector('[data-callback]') || document.querySelector('[data-sitekey]');
const callbackName = el?.getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
} else {
document.getElementById('g-recaptcha-response').innerHTML = token;
document.querySelector('form').submit();
}
}, token);
Полная рабочая функция
import requests
import time
def solve_invisible_recaptcha(api_key, sitekey, page_url):
submit = requests.get("https://ocr.captchaai.com/in.php", params={
"key": api_key, "method": "userrecaptcha", "googlekey": sitekey,
"pageurl": page_url, "invisible": 1, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
for _ in range(40):
time.sleep(5)
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.get('request')}")
raise TimeoutError("Timed out")
token = solve_invisible_recaptcha("YOUR_API_KEY", "6LdKlZEU...", "https://example.com/signup")
Полный работоспособный пример
Нужен полноценный рабочий проект с настройкой среды, опросом, повторными попытками и обработкой ошибок?
Полный работоспособный пример см. на GitHub →.
Часто задаваемые вопросы
Как узнать, невидима ли reCAPTCHA?
Найдите data-size="invisible" в блоке виджета или кнопку с data-sitekey. Если видимого флажка нет, скорее всего, он невидим.
Нужен ли мне invisible=1 для невидимой reCAPTCHA?
Да. Без него CaptchaAI рассматривает задачу как стандарт v2, и токен может быть отклонен.
Что делать, если я не могу найти функцию обратного вызова?
Попробуйте заполнить скрытое поле g-recaptcha-response и отправить форму. Некоторые невидимые реализации возвращаются к этому методу. Если это не помогло, найдите в JavaScript страницы функции, обрабатывающие ответы reCAPTCHA.
Может ли невидимая reCAPTCHA быть корпоративной?
Да. Добавьте в свой запрос invisible=1 и enterprise=1.
Почему страница не отвечает после выполнения обратного вызова?
Имя обратного вызова может быть неправильным или страница может ожидать дополнительных полей формы. Проверьте точное имя обратного вызова и убедитесь, что все обязательные поля формы заполнены, прежде чем сработает обратный вызов.
Начните решать невидимую reCAPTCHA
Получите ключ API по адресуcaptchaai.com/api.php. Добавьте invisible=1 в свой код решения версии 2 и используйте приведенный выше шаблон внедрения обратного вызова.
Связанные руководства
- Как работает reCAPTCHA Invisible
- Распространенные ошибки reCAPTCHA Invisible
- Объяснение reCAPTCHA v2 против невидимого
- Как решить обратный вызов reCAPTCHA v2 с помощью API