reCAPTCHA v2 Invisible не имеет видимого флажка. Он активируется автоматически, когда пользователь отправляет форму или нажимает кнопку, и отображает вызов только в том случае, если анализ рисков Google обнаруживает подозрительное поведение. Это усложняет обнаружение при автоматизации — вы можете не осознавать наличие CAPTCHA, пока не завершится ошибка отправки формы.
Чем Invisible reCAPTCHA отличается от стандартной версии v2
| Особенность | reCAPTCHA v2 Стандартный | reCAPTCHA v2 Невидимый |
|---|---|---|
| Видимый виджет | Да (флажок) | Нет (только значок) |
| Взаимодействие с пользователем | Нажмите флажок | Автоматически при отправке формы |
data-size |
normal или compact |
invisible |
| Всплывающее окно вызова | Всегда возможно | Только для подозрительных пользователей |
| DOM-элемент | .g-recaptcha дел. |
.g-recaptcha div или программный |
Обнаружение невидимой reCAPTCHA
Способ 1. Проверьте атрибут размера данных.
// Browser console
const widgets = document.querySelectorAll('.g-recaptcha');
widgets.forEach((el, i) => {
const size = el.getAttribute('data-size');
const sitekey = el.getAttribute('data-sitekey');
console.log(`Widget ${i}: size=${size}, sitekey=${sitekey}`);
if (size === 'invisible') {
console.log(' → This is Invisible reCAPTCHA');
}
});
Способ 2. Проверьте наличие значка.
Невидимая reCAPTCHA показывает небольшой значок в углу:
const badge = document.querySelector('.grecaptcha-badge');
if (badge) {
console.log('reCAPTCHA badge found — likely Invisible reCAPTCHA');
console.log('Badge visibility:', getComputedStyle(badge).visibility);
}
Способ 3. Проверьте вызовы grecaptcha.execute
Если на странице используется программный вызов (без элемента div .g-recaptcha):
// Look for grecaptcha.execute in page scripts
document.querySelectorAll('script:not([src])').forEach(s => {
if (s.textContent.includes('grecaptcha.execute')) {
console.log('Found grecaptcha.execute — Invisible reCAPTCHA');
const match = s.textContent.match(/grecaptcha\.execute\s*\(\s*['"]?([^'",\s)]+)/);
if (match) console.log('Sitekey:', match[1]);
}
});
Способ 4. Проверьте параметр рендеринга тега скрипта
document.querySelectorAll('script[src*="recaptcha"]').forEach(s => {
if (s.src.includes('render=') && !s.src.includes('render=explicit')) {
console.log('Invisible/v3 reCAPTCHA detected in script:', s.src);
}
});
Решение с помощью CaptchaAI
Ключевое отличие: передайте invisible=1 в CaptchaAI, чтобы решатель знал, что обрабатывает невидимый вариант.
Питон
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit with invisible flag
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-SITEKEY",
"pageurl": "https://https://staging.example.com/qa-login",
"invisible": "1", # critical for Invisible reCAPTCHA
"json": "1",
}).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
print(f"Submitted: {task_id}")
# Poll for result
for _ in range(24):
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["status"] == 1:
print(f"Token: {result['request'][:50]}...")
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'userrecaptcha',
googlekey: '6Le-SITEKEY',
pageurl: 'https://https://staging.example.com/qa-login',
invisible: 1,
json: 1,
}
});
const taskId = resp.data.request;
console.log(`Submitted: ${taskId}`);
передача токена во внутренний QA endpoint для невидимой reCAPTCHA
Невидимая reCAPTCHA обычно привязана к кнопке или отправке формы. После инъекции вам необходимо запустить обратный вызов или отправить форму:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://https://staging.example.com/qa-login")
# After solving, inject and trigger
driver.execute_script("""
// Set the token
document.querySelector('textarea[name="g-recaptcha-response"]').value = arguments[0];
// Find and trigger the callback
var widget = document.querySelector('.g-recaptcha');
var callbackName = widget ? widget.getAttribute('data-callback') : null;
if (callbackName && typeof window[callbackName] === 'function') {
window[callbackName](arguments[0]);
}
""", token)
# Submit the form
driver.find_element(By.CSS_SELECTOR, "form#login").submit()
Определение триггерного элемента
Невидимую reCAPTCHA можно привязать к определенной кнопке:
<button class="g-recaptcha"
data-sitekey="6Le-SITEKEY"
data-callback="onSubmit"
data-size="invisible">
Submit
</button>
Или активировать программно:
// Site's code
document.getElementById('submit-btn').addEventListener('click', function() {
grecaptcha.execute();
});
Проверьте оба шаблона:
// Find elements with g-recaptcha class that are buttons
document.querySelectorAll('button.g-recaptcha, input.g-recaptcha').forEach(el => {
console.log('Trigger element:', el.tagName, el.textContent.trim());
console.log(' data-sitekey:', el.getAttribute('data-sitekey'));
console.log(' data-callback:', el.getAttribute('data-callback'));
});
Поиск неисправностей
| Проблема | Причина | Исправить |
|---|---|---|
| Токен отклонен | В отправке отсутствует invisible=1 |
Добавьте invisible: "1" в запрос CaptchaAI |
| Не могу найти ключ сайта | Нет элемента .g-recaptcha |
Проверьте программные вызовы grecaptcha.render() или grecaptcha.execute(). |
| Форма отправляется, но не получается | Обратный звонок не запущен | Найдите и вызовите функцию data-callback. |
| Капча не обнаружена | Появляется только для подозрительного трафика | Проверьте наличие элемента grecaptcha-badge или тегов сценария рекапчи. |
Часто задаваемые вопросы
Как отличить Invisible v2 от v3?
Invisible v2 использует grecaptcha.execute() без параметра action. v3 использует grecaptcha.execute(sitekey, {action: 'submit'}) с действием. Кроме того, версия 3 использует render=SITEKEY в URL-адресе сценария.
Имеет ли значение забвение невидимого флага?
Да. Без invisible=1 решатель может попробовать другой подход к решению, в результате которого будут получены токены, отклоненные сайтом.
Могу ли я решить Invisible reCAPTCHA без браузера?
Да, вам нужен только ключ сайта и URL-адрес страницы. Браузер необходим только для передача токена во внутренний QA endpoint и запуска обратного вызова.
Легко решите reCAPTCHA v2 Invisible с помощью CaptchaAI
Получите ключ API по адресуcaptchaai.com.
Связанные руководства
- reCAPTCHA v2 Механизм обратного вызова
- Извлечение параметров reCAPTCHA из исходного кода страницы
- Обнаружение CAPTCHA в консоли браузера