Туториалы по API

Объяснение параметра reCAPTCHA Data-S

Параметр data-s — это токен, специфичный для сеанса, который появляется в некоторых реализациях reCAPTCHA, в первую очередь на ресурсах, принадлежащих Google, таких как Google Search, YouTube и Google Play. Если он присутствует, он должен быть включен в ваш запрос API решателя — его отсутствие приведет к сбоям решения или недействительным токенам. В этом руководстве объясняется, что такое data-s, где он появляется, как его извлечь и как передать в CaptchaAI.


Что такое параметр data-s?

Параметр data-s — это сгенерированный сервером токен сеанса, встроенный в HTML-код виджета reCAPTCHA. Он связывает запрос CAPTCHA с конкретным сеансом сервера, предотвращая повторное использование токена в разных сеансах.

Где он появляется

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

Атрибут data-s находится рядом со стандартным data-sitekey в элементе reCAPTCHA <div>.

Ключевые характеристики

Свойство Ценить
Формат Строка в кодировке Base64, 200–500 символов.
Продолжительность жизни Одноразовый, привязанный к текущей загрузке страницы
Объем Зависит от сеанса, не может быть повторно использован при загрузке страницы.
Необходимый Да, если он присутствует — без него решение не удастся
Обновляется Новое значение на каждой странице load/refresh

Когда присутствуют data-s

Параметр data-s НЕ присутствует в большинстве реализаций reCAPTCHA. Он появляется в первую очередь на:

Сайт Присутствие Примечания
Поиск Google (извините, /unusual, трафик) Всегда Требуется для решения CAPTCHA в поиске Google.
YouTube Иногда Появляется в определенных потоках проверки.
Google Play Иногда Проверка списка приложений
Google Формы Редко Ограниченные реализации
Сторонние сайты, использующие reCAPTCHA Почти никогда Стандартные интеграции не используют data-ы

Если вы НЕ работаете с ресурсами, принадлежащими Google, вам, вероятно, не нужно беспокоиться о data-s. Если ваш решатель возвращает недопустимые токены для CAPTCHA поиска Google, вероятной причиной является отсутствие data-s.


Как data-s работает технически

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

Параметр data-s по существу действует как одноразовый номер — он привязывает запрос CAPTCHA к определенному сеансу на стороне сервера. Решатель должен использовать это значение при создании токена, чтобы полученный токен соответствовал ожидаемому сеансу.


Извлечение данных со страницы

Извлечение 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
# }

Извлечение 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);

Извлечение селена (для динамических страниц)

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"}

Решение с данными с использованием CaptchaAI

Если data-s присутствует, включите его в свой запрос API CaptchaAI:

Питон

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");
}

Распространенные ошибки при работе с данными

Ошибка Симптом Исправить
Опуск данных, если они присутствуют Проверка токена не выполняется автоматически Всегда проверяйте атрибут data-s перед отправкой.
Включая данные, если они отсутствуют Устранить ошибку или отклоненный запрос Включайте data-s только в том случае, если атрибут существует в виджете.
Повторное использование данных при загрузке страниц Неверный токен Извлекайте свежие данные для каждой загрузки страницы.
URL-кодирование данных неправильное Неверный параметр Передайте необработанное значение base64 без дополнительного кодирования.
Использование устаревших данных (страница загружена несколько минут назад) Несоответствие токенов Извлеките данные непосредственно перед отправкой в ​​решатель

Помощник по извлечению данных

Утилита многократного использования, которая обрабатывает страницы reCAPTCHA как с данными, так и без них:

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

Часто задаваемые вопросы

Всегда ли мне нужны данные для решения reCAPTCHA?

Нет. Параметр data-s появляется только в небольшом подмножестве реализаций reCAPTCHA, в основном в ресурсах, принадлежащих Google. Для стандартных сторонних веб-сайтов, использующих reCAPTCHA, вам нужны только sitekey и pageurl. Всегда проверяйте наличие data-s в виджете, прежде чем решить, включать ли его.

Что произойдет, если я включу данные, когда они не нужны?

Некоторые решатели могут игнорировать дополнительный параметр. Другие могут возвращать ошибку. подходящий всего включать data-s только тогда, когда он действительно существует в виджете reCAPTCHA целевой страницы.

Могу ли я кэшировать данные для нескольких решений?

Нет. Значение data-s зависит от сеанса и привязано к загрузке одной страницы. Каждый раз, когда вы загружаете страницу CAPTCHA, генерируется новое значение data-s. Вы должны извлечь новое значение перед каждым запросом на решение.

Почему мой поиск CAPTCHA в Google не удается решить даже при правильном ключе сайта?

Если вы решаете CAPTCHA в Google Поиске «необычный трафик», наиболее распространенной причиной неудачи является отсутствие параметра data-s. CAPTCHA поиска Google всегда включает data-s, и без него решение не будет выполнено. Извлеките атрибут data-s из элемента <div> виджета reCAPTCHA.


Краткое содержание

Параметр data-s — это токен привязки сеанса, который можно найти в некоторых реализациях reCAPTCHA, в основном в ресурсах, принадлежащих Google. Если он присутствует, вы должны извлечь его из HTML-кода виджета reCAPTCHA и включить в свойCaptchaAIAPI-запрос. Всегда проверяйте наличие data-s перед отправкой — включите его, если он присутствует, и опустите, если он отсутствует. В частности, для CAPTCHA поиска Google всегда требуется data-s.

Похожие статьи

Комментарии для этой статьи отключены.