reCAPTCHA v2 Invisible không có hộp kiểm hiển thị. Nó tự động kích hoạt khi người dùng gửi biểu mẫu hoặc nhấp vào nút và chỉ hiển thị thử thách nếu phân tích rủi ro của Google phát hiện thấy hành vi đáng ngờ. Điều này khiến việc tự động hóa khó phát hiện hơn — bạn có thể không nhận ra có CAPTCHA cho đến khi việc gửi biểu mẫu của bạn không thành công.
ReCAPTCHA vô hình khác với v2 tiêu chuẩn như thế nào
| tính năng | Tiêu chuẩn reCAPTCHA v2 | reCAPTCHA v2 Vô hình |
|---|---|---|
| Tiện ích hiển thị | Có (hộp kiểm) | Không (chỉ huy hiệu) |
| Tương tác người dùng | Nhấp vào hộp kiểm | Tự động gửi biểu mẫu |
data-size |
normal hoặc compact |
invisible |
| Cửa sổ bật lên thử thách | Luôn luôn có thể | Chỉ dành cho người dùng đáng ngờ |
| Phần tử DOM | phân chia .g-recaptcha |
.g-recaptcha div hoặc có lập trình |
Phát hiện reCAPTCHA vô hình
Cách 1: Kiểm tra thuộc tính data-size
// 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');
}
});
Cách 2: Kiểm tra huy hiệu
ReCAPTCHA vô hình hiển thị một huy hiệu nhỏ ở góc:
const badge = document.querySelector('.grecaptcha-badge');
if (badge) {
console.log('reCAPTCHA badge found — likely Invisible reCAPTCHA');
console.log('Badge visibility:', getComputedStyle(badge).visibility);
}
Cách 3: Kiểm tra cuộc gọi grecaptcha.execute
Nếu trang sử dụng lệnh gọi theo chương trình (không có 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]);
}
});
Cách 4: Kiểm tra tham số kết xuất thẻ script
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);
}
});
Giải quyết bằng CaptchaAI
Điểm khác biệt chính: chuyển invisible=1 sang CaptchaAI để người giải biết rằng nó đang xử lý một biến thể Vô hình.
Python
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://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://staging.example.com/qa-login',
invisible: 1,
json: 1,
}
});
const taskId = resp.data.request;
console.log(`Submitted: ${taskId}`);
Chèn mã thông báo cho reCAPTCHA vô hình
ReCAPTCHA vô hình thường được liên kết với một nút hoặc gửi biểu mẫu. Sau khi tiêm, bạn cần kích hoạt lệnh gọi lại hoặc gửi biểu mẫu:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("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()
Xác định phần tử kích hoạt
ReCAPTCHA vô hình có thể được liên kết với một nút cụ thể:
<button class="g-recaptcha"
data-sitekey="6Le-SITEKEY"
data-callback="onSubmit"
data-size="invisible">
Submit
</button>
Hoặc được kích hoạt theo chương trình:
// Site's code
document.getElementById('submit-btn').addEventListener('click', function() {
grecaptcha.execute();
});
Kiểm tra cả hai mẫu:
// 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'));
});
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Mã thông báo bị từ chối | Thiếu invisible=1 khi gửi |
Thêm yêu cầu invisible: "1" vào CaptchaAI |
| Không thể tìm thấy khóa trang web | Không có phân chia .g-recaptcha |
Kiểm tra các cuộc gọi grecaptcha.render() hoặc grecaptcha.execute() có lập trình |
| Gửi biểu mẫu nhưng không thành công | Cuộc gọi lại không được kích hoạt | Tìm và gọi hàm data-callback |
| CAPTCHA không được phát hiện | Chỉ xuất hiện khi có lưu lượng truy cập đáng ngờ | Kiểm tra phần tử grecaptcha-badge hoặc thẻ tập lệnh recaptcha |
Câu hỏi thường gặp
Làm cách nào để phân biệt Vô hình v2 với v3?
Invisible v2 sử dụng grecaptcha.execute() không có tham số action. v3 sử dụng grecaptcha.execute(sitekey, {action: 'submit'}) với một hành động. Ngoài ra, v3 sử dụng render=SITEKEY trong URL tập lệnh.
Việc quên lá cờ vô hình có quan trọng không?
Vâng. Nếu không có invisible=1, người giải có thể thử một cách giải khác để tạo ra các mã thông báo bị trang web từ chối.
Tôi có thể giải quyết reCAPTCHA vô hình mà không cần trình duyệt không?
Có — bạn chỉ cần mã trang web và URL trang. Trình duyệt chỉ cần thêm mã thông báo và kích hoạt lệnh gọi lại.
Giải quyết reCAPTCHA v2 Vô hình một cách liền mạch với CaptchaAI
Nhận khóa API của bạn tạicaptchaai.com.