Hướng Dẫn Thực Hành

Trích xuất tham số reCAPTCHA từ nguồn trang

Mọi giải pháp reCAPTCHA thông qua CaptchaAI đều yêu cầu URL trang và khóa trang chính xác. Một số loại CAPTCHA cũng cần các tham số bổ sung - hành động (v3), dữ liệu (trang web của Google) hoặc cờ doanh nghiệp. Hướng dẫn này đề cập đến mọi phương pháp trích xuất.


Thông số theo phiên bản reCAPTCHA

tham số v2 Tiêu chuẩn v2 Vô hình v3 Doanh nghiệp
googlekey (khóa trang web) Bắt buộc Bắt buộc Bắt buộc Bắt buộc
pageurl Bắt buộc Bắt buộc Bắt buộc Bắt buộc
invisible 1
action Bắt buộc Đôi khi
data-s Đôi khi Đôi khi
enterprise 1

Cách 1: Trích xuất thuộc tính HTML

Từ thuộc tính data-sitekey

import re
import requests

url = "https://staging.example.com/qa-login"
html = requests.get(url).text

# Find data-sitekey
match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', html)
if match:
    sitekey = match.group(1)
    print(f"Sitekey: {sitekey}")

# Check if invisible
invisible_match = re.search(r'data-size=["\']invisible["\']', html)
is_invisible = bool(invisible_match)
print(f"Invisible: {is_invisible}")

# Find callback
callback_match = re.search(r'data-callback=["\'](\w+)["\']', html)
callback = callback_match.group(1) if callback_match else None
print(f"Callback: {callback}")

# Check for data-s (Google-owned sites)
data_s_match = re.search(r'data-s=["\']([^"\']+)["\']', html)
data_s = data_s_match.group(1) if data_s_match else None
print(f"data-s: {data_s}")

JavaScript (Puppeteer)

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });

const params = await page.evaluate(() => {
  const widget = document.querySelector('.g-recaptcha');
  if (!widget) return null;

  return {
    sitekey: widget.getAttribute('data-sitekey'),
    size: widget.getAttribute('data-size'),
    callback: widget.getAttribute('data-callback'),
    dataS: widget.getAttribute('data-s'),
    invisible: widget.getAttribute('data-size') === 'invisible',
  };
});

console.log(params);

Cách 2: Trích xuất thẻ script

Khóa trang web reCAPTCHA v3 và Enterprise

khóa trang web v3 được nhúng trong URL tập lệnh:

# Find sitekey from script src
v3_match = re.search(
    r'recaptcha/(?:api|enterprise)\.js\?.*?render=([A-Za-z0-9_-]+)',
    html
)
if v3_match:
    sitekey = v3_match.group(1)
    print(f"v3 Sitekey: {sitekey}")

# Check enterprise
is_enterprise = 'enterprise.js' in html
print(f"Enterprise: {is_enterprise}")

Tìm tham số hành động

Hành động được truyền bằng mã JavaScript, không phải bằng thuộc tính HTML:

# Search for grecaptcha.execute calls
action_match = re.search(
    r'grecaptcha\.execute\s*\([^,]+,\s*\{[^}]*action\s*:\s*["\']([^"\']+)',
    html
)
if action_match:
    action = action_match.group(1)
    print(f"Action: {action}")

Cách 3: Trích xuất iframe src

Khi reCAPTCHA được hiển thị bên trong iframe:

# Find reCAPTCHA iframe
iframe_match = re.search(
    r'<iframe[^>]+src=["\']([^"\']*recaptcha/api2/anchor[^"\']*)["\']',
    html
)
if iframe_match:
    iframe_src = iframe_match.group(1)
    sitekey_match = re.search(r'k=([A-Za-z0-9_-]+)', iframe_src)
    if sitekey_match:
        sitekey = sitekey_match.group(1)
        print(f"Iframe sitekey: {sitekey}")

Phương pháp 4: Trích xuất kết xuất JavaScript

Đối với các trang hiển thị reCAPTCHA động bằng grecaptcha.render():

# Find grecaptcha.render calls
render_match = re.search(
    r'grecaptcha\.render\s*\([^,]*,\s*\{([^}]+)\}',
    html
)
if render_match:
    config = render_match.group(1)
    sk = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', config)
    cb = re.search(r'callback\s*:\s*["\']?(\w+)', config)
    sz = re.search(r'size\s*:\s*["\'](\w+)', config)
    print(f"Sitekey: {sk.group(1) if sk else 'not found'}")
    print(f"Callback: {cb.group(1) if cb else 'not found'}")
    print(f"Size: {sz.group(1) if sz else 'not found'}")

Chức năng trích xuất hoàn chỉnh

import re
import requests

def extract_recaptcha_params(url):
    html = requests.get(url, timeout=15).text
    params = {"pageurl": url}

    # Sitekey from data-sitekey
    sk = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)', html)
    if sk:
        params["sitekey"] = sk.group(1)

    # Sitekey from script render parameter (v3)
    if "sitekey" not in params:
        v3 = re.search(r'render=([A-Za-z0-9_-]{20,})', html)
        if v3:
            params["sitekey"] = v3.group(1)

    # Sitekey from iframe
    if "sitekey" not in params:
        iframe = re.search(r'recaptcha.*?k=([A-Za-z0-9_-]+)', html)
        if iframe:
            params["sitekey"] = iframe.group(1)

    # Sitekey from grecaptcha.render
    if "sitekey" not in params:
        render = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', html)
        if render:
            params["sitekey"] = render.group(1)

    # Version detection
    if re.search(r'data-size=["\']invisible', html):
        params["invisible"] = True
    if 'enterprise.js' in html:
        params["enterprise"] = True

    # Action (v3)
    action = re.search(
        r'action\s*:\s*["\']([^"\']+)',
        html[html.find('grecaptcha.execute'):] if 'grecaptcha.execute' in html else ''
    )
    if action:
        params["action"] = action.group(1)

    # data-s
    ds = re.search(r'data-s=["\']([^"\']+)', html)
    if ds:
        params["data_s"] = ds.group(1)

    # Callback
    cb = re.search(r'data-callback=["\'](\w+)', html)
    if cb:
        params["callback"] = cb.group(1)

    return params

# Usage
params = extract_recaptcha_params("https://staging.example.com/qa-login")
for k, v in params.items():
    print(f"  {k}: {v}")

Sản lượng dự kiến:

  pageurl: https://staging.example.com/qa-login
  sitekey: 6Le-SITEKEY-abc123
  invisible: True
  callback: onCaptchaComplete

Gửi các tham số đã trích xuất tới CaptchaAI

data = {
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": params["sitekey"],
    "pageurl": params["pageurl"],
    "json": "1",
}

if params.get("invisible"):
    data["invisible"] = "1"
if params.get("enterprise"):
    data["enterprise"] = "1"
if params.get("action"):
    data["action"] = params["action"]
if params.get("data_s"):
    data["data-s"] = params["data_s"]

resp = requests.post("https://ocr.captchaai.com/in.php", data=data).json()

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Không tìm thấy khóa trang web Trang sử dụng kết xuất động Sử dụng Puppeteer/Selenium thay vì HTML tĩnh
Khóa trang web sai Nhiều phiên bản reCAPTCHA Kiểm tra xem tiện ích nào ánh xạ tới biểu mẫu bạn đang gửi
Không tìm thấy hành động Được xác định trong tệp JS bên ngoài Tìm nạp và tìm kiếm các tệp JavaScript được liên kết
data-s thay đổi theo yêu cầu Google tái tạo nó Trích xuất data-s mới cho mỗi lần giải

Câu hỏi thường gặp

Tôi có thể trích xuất các tham số mà không cần tải trang trong trình duyệt không?

Có, đối với hầu hết các trang web — mã khóa trang web nằm trong nguồn HTML. Tuy nhiên, CAPTCHA được hiển thị bằng JavaScript yêu cầu trình duyệt hoặc trình duyệt không có giao diện người dùng.

Khóa trang web có giống với khóa API không?

Không. Sitekey là khóa công khai được gán cho trang web. Việc chia sẻ là an toàn và hiển thị trong nguồn trang.


Sử dụng các tham số được trích xuất bằng CaptchaAI để giải quyết một cách đáng tin cậy

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.