Hướng Dẫn API

Giải thích về thông số reCAPTCHA Data-S

Tham số data-s là mã thông báo dành riêng cho phiên xuất hiện trong một số triển khai reCAPTCHA, chủ yếu trên các sản phẩm do Google sở hữu như Google Tìm kiếm, YouTube và Google Play. Khi xuất hiện, nó phải được đưa vào yêu cầu API bộ giải của bạn — việc bỏ qua nó sẽ gây ra lỗi giải quyết hoặc mã thông báo không hợp lệ. Hướng dẫn này giải thích data-s là gì, nó xuất hiện ở đâu, cách giải nén nó và cách chuyển nó tới CaptchaAI.


Tham số data-s là gì?

Tham số data-s là mã thông báo phiên do máy chủ tạo được nhúng trong HTML tiện ích reCAPTCHA. Nó liên kết thử thách CAPTCHA với một phiên máy chủ cụ thể, ngăn chặn việc sử dụng lại mã thông báo trên các phiên khác nhau.

Nó xuất hiện ở đâu

<!-- reCAPTCHA widget with data-s parameter -->
<div class="g-recaptcha"
     data-sitekey="6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp"
     data-s="AB2grfE8_kyMp3XYRuJo5c..."
     data-callback="onCaptchaSolved">
</div>

Thuộc tính data-s nằm cùng với data-sitekey tiêu chuẩn trên phần tử reCAPTCHA <div>.

Đặc điểm chính

Tài sản Giá trị
Định dạng Chuỗi được mã hóa Base64, 200-500 ký tự
Trọn đời Sử dụng một lần, gắn liền với tải trang hiện tại
Phạm vi Dành riêng cho từng phiên, không thể sử dụng lại khi tải trang
Bắt buộc Có, khi có mặt – giải quyết thất bại nếu không có nó
Làm mới Giá trị mới trên mỗi trang tải/refresh

Khi có dữ liệu

Tham số data-s KHÔNG xuất hiện trên hầu hết quá trình triển khai reCAPTCHA. Nó xuất hiện chủ yếu trên:

Trang web sự hiện diện Ghi chú
Tìm kiếm của Google (xin lỗi lưu lượng truy cập/unusual) Luôn luôn Cần thiết để giải CAPTCHA trên Google Tìm kiếm
YouTube Đôi khi Xuất hiện trên một số luồng xác minh nhất định
Google Play Đôi khi Xác minh danh sách ứng dụng
Google Biểu mẫu hiếm khi Triển khai hạn chế
Các trang web của bên thứ ba sử dụng reCAPTCHA Hầu như không bao giờ Tích hợp tiêu chuẩn không sử dụng dữ liệu

Nếu bạn KHÔNG làm việc với các sản phẩm do Google sở hữu, bạn có thể không cần phải lo lắng về data-s. Nếu trình giải của bạn trả về mã thông báo không hợp lệ cho CAPTCHA của Google Tìm kiếm thì nguyên nhân có thể là do thiếu data-s.


Cách dữ liệu hoạt động về mặt kỹ thuật

User triggers CAPTCHA (e.g., Google flags unusual search traffic)
    ↓
Google serves a CAPTCHA page with:

  - data-sitekey (site key, same for all Google search CAPTCHAs)
  - data-s (session token, unique per page load)
    ↓
reCAPTCHA widget initializes with both parameters
    ↓
Challenge completion generates a g-recaptcha-response token
    ↓
Token is submitted alongside the session reference
    ↓
Google validates token + session binding
    ↓
If data-s was not used during solving: "invalid-input-response" or silent failure

Tham số data-s về cơ bản hoạt động như một tham số nonce - nó liên kết thử thách CAPTCHA với một phiên phía máy chủ cụ thể. Người giải phải sử dụng giá trị này khi tạo mã thông báo để mã thông báo kết quả khớp với phiên dự kiến.


Trích xuất dữ liệu từ trang

Trích xuất Python

import requests
from bs4 import BeautifulSoup
import re

def extract_recaptcha_params(url):
    """Extract reCAPTCHA parameters including data-s from a page."""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/120.0.0.0 Safari/537.36",
    }

    response = requests.get(url, headers=headers, timeout=15)
    soup = BeautifulSoup(response.text, "html.parser")

    # Find reCAPTCHA widget div
    widget = soup.find("div", class_="g-recaptcha")
    if not widget:
        # Try finding by data-sitekey attribute
        widget = soup.find(attrs={"data-sitekey": True})

    if not widget:
        return {"error": "No reCAPTCHA widget found"}

    params = {
        "sitekey": widget.get("data-sitekey"),
        "data_s": widget.get("data-s"),
        "callback": widget.get("data-callback"),
        "size": widget.get("data-size"),
        "has_data_s": widget.get("data-s") is not None,
    }

    return params

# Example: Google "unusual traffic" page
params = extract_recaptcha_params("https://www.google.com/sorry/index")
print(params)
# {
#   "sitekey": "6LfwuyUT...",
#   "data_s": "AB2grfE8_kyMp3...",
#   "has_data_s": True
# }

Trích xuất Node.js

const axios = require("axios");
const cheerio = require("cheerio");

async function extractRecaptchaParams(url) {
    const { data: html } = await axios.get(url, {
        headers: {
            "User-Agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
                "AppleWebKit/537.36 (KHTML, like Gecko) " +
                "Chrome/120.0.0.0 Safari/537.36",
        },
        timeout: 15000,
    });

    const $ = cheerio.load(html);
    const widget = $(".g-recaptcha, [data-sitekey]").first();

    if (widget.length === 0) {
        return { error: "No reCAPTCHA widget found" };
    }

    return {
        sitekey: widget.attr("data-sitekey"),
        dataS: widget.attr("data-s") || null,
        callback: widget.attr("data-callback") || null,
        hasDataS: !!widget.attr("data-s"),
    };
}

extractRecaptchaParams("https://www.google.com/sorry/index")
    .then(console.log);

Trích xuất Selenium (đối với các trang động)

from selenium import webdriver
from selenium.webdriver.common.by import By

def extract_data_s_selenium(driver, url):
    """Extract data-s from a dynamically loaded reCAPTCHA page."""
    driver.get(url)

    # Wait for reCAPTCHA widget to load
    import time
    time.sleep(3)

    try:
        widget = driver.find_element(By.CSS_SELECTOR, ".g-recaptcha, [data-sitekey]")
        return {
            "sitekey": widget.get_attribute("data-sitekey"),
            "data_s": widget.get_attribute("data-s"),
        }
    except Exception:
        return {"error": "Widget not found"}

Giải quyết dữ liệu bằng CaptchaAI

Khi có data-s, hãy đưa nó vào yêu cầu API CaptchaAI của bạn:

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Step 1: Extract parameters from the CAPTCHA page
sitekey = "6LfwuyUTAAAAAOAmoS0fdqijC2PbbdH4kjq62Y1b"
data_s = "AB2grfE8_kyMp3XYRuJo5c..."  # Extracted from data-s attribute
page_url = "https://www.google.com/sorry/index?continue=..."

# Step 2: Submit to CaptchaAI WITH data-s
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "data-s": data_s,  # Include data-s parameter
    "json": 1,
})

task_id = submit.json()["request"]

# Step 3: Poll for result
for _ in range(60):
    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:
        token = result["request"]
        print(f"Token: {token[:60]}...")
        # Submit this token to the Google CAPTCHA form
        break

Node.js

const axios = require("axios");

async function solveWithDataS(sitekey, dataS, pageUrl) {
    const API_KEY = "YOUR_API_KEY";

    // Submit with data-s
    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: sitekey,
            pageurl: pageUrl,
            "data-s": dataS,
            json: 1,
        })
    );

    const taskId = submit.request;

    // Poll
    for (let i = 0; i < 60; i++) {
        await new Promise((r) => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            {
                params: {
                    key: API_KEY,
                    action: "get",
                    id: taskId,
                    json: 1,
                },
            }
        );

        if (result.status === 1) {
            return result.request;
        }
    }

    throw new Error("Timeout");
}

Các lỗi dữ liệu thường gặp

sai lầm Triệu chứng sửa chữa
Bỏ qua dữ liệu khi có mặt Xác thực mã thông báo thất bại trong âm thầm Luôn kiểm tra thuộc tính data-s trước khi gửi
Bao gồm dữ liệu khi không có Giải quyết lỗi hoặc yêu cầu bị từ chối Chỉ bao gồm dữ liệu nếu thuộc tính tồn tại trên tiện ích
Sử dụng lại dữ liệu khi tải trang Mã thông báo không hợp lệ Trích xuất dữ liệu mới cho mỗi lần tải trang
Dữ liệu mã hóa URL không chính xác Tham số không đúng định dạng Truyền giá trị base64 thô mà không cần mã hóa bổ sung
Sử dụng dữ liệu cũ (trang được tải vài phút trước) Mã thông báo không khớp Trích xuất dữ liệu ngay trước khi gửi cho người giải

Trình trợ giúp trích xuất dữ liệu

Một tiện ích có thể tái sử dụng để xử lý cả trang reCAPTCHA có dữ liệu và không có dữ liệu:

import requests
from bs4 import BeautifulSoup

class RecaptchaExtractor:
    """Extract reCAPTCHA parameters from any page."""

    def __init__(self, url, session=None):
        self.url = url
        self.session = session or requests.Session()
        self.params = None

    def extract(self):
        """Extract sitekey, data-s, and other parameters."""
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/120.0.0.0 Safari/537.36",
        }

        response = self.session.get(self.url, headers=headers, timeout=15)
        soup = BeautifulSoup(response.text, "html.parser")

        widget = soup.find(attrs={"data-sitekey": True})
        if not widget:
            raise ValueError("No reCAPTCHA widget found on page")

        self.params = {
            "sitekey": widget["data-sitekey"],
            "pageurl": self.url,
        }

        # Include data-s only if present
        data_s = widget.get("data-s")
        if data_s:
            self.params["data-s"] = data_s

        return self.params

    def build_solver_payload(self, api_key):
        """Build CaptchaAI submission payload with correct parameters."""
        if not self.params:
            self.extract()

        payload = {
            "key": api_key,
            "method": "userrecaptcha",
            "googlekey": self.params["sitekey"],
            "pageurl": self.params["pageurl"],
            "json": 1,
        }

        # Only include data-s when it exists
        if "data-s" in self.params:
            payload["data-s"] = self.params["data-s"]

        return payload

# Usage
extractor = RecaptchaExtractor("https://www.google.com/sorry/index?continue=...")
payload = extractor.build_solver_payload("YOUR_API_KEY")
# payload includes data-s only when present on the page

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

Tôi có luôn cần dữ liệu để giải reCAPTCHA không?

Không. Tham số data-s chỉ xuất hiện trên một nhóm nhỏ triển khai reCAPTCHA, chủ yếu là các sản phẩm do Google sở hữu. Đối với các trang web tiêu chuẩn của bên thứ ba sử dụng reCAPTCHA, bạn chỉ cần sitekeypageurl. Luôn kiểm tra sự hiện diện của data-s trên tiện ích trước khi quyết định có đưa nó vào hay không.

Điều gì xảy ra nếu tôi đưa dữ liệu vào khi không cần thiết?

Một số bộ giải có thể bỏ qua tham số bổ sung. Những người khác có thể trả lại một lỗi. Cách tốt nhất là chỉ đưa data-s vào khi nó thực sự tồn tại trên tiện ích reCAPTCHA của trang đích.

Tôi có thể lưu trữ dữ liệu qua nhiều lần giải quyết không?

Không. Giá trị data-s dành riêng cho phiên và gắn với một lần tải trang. Mỗi lần bạn tải trang CAPTCHA, một giá trị data-s mới sẽ được tạo. Bạn phải trích xuất một giá trị mới trước mỗi yêu cầu giải quyết.

Tại sao giải pháp CAPTCHA trên Google Tìm kiếm của tôi không thành công ngay cả khi sử dụng khóa trang web chính xác?

Nếu bạn đang giải CAPTCHA "lưu lượng truy cập bất thường" trên Google Tìm kiếm thì nguyên nhân lỗi phổ biến nhất là thiếu tham số data-s. CAPTCHA của Google Tìm kiếm luôn bao gồm data-s và việc giải quyết sẽ không thành công nếu không có nó. Trích xuất thuộc tính data-s từ phần tử <div> của tiện ích reCAPTCHA.


Tóm tắt

Tham số data-s là mã thông báo liên kết phiên được tìm thấy trên các triển khai reCAPTCHA chọn lọc, chủ yếu là các sản phẩm do Google sở hữu. Khi có mặt, bạn phải trích xuất nó từ HTML của tiện ích reCAPTCHA và đưa nó vàoCaptchaAIYêu cầu API. Luôn kiểm tra data-s trước khi gửi - bao gồm nó khi có, bỏ qua khi vắng mặt. Đặc biệt đối với CAPTCHA của Google Tìm kiếm, data-s luôn được yêu cầu.

bài viết liên quan

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