Phân Tích Kỹ Thuật

reCAPTCHA v2 Vô hình: Phát hiện và giải quyết trình kích hoạt

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.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.