Tutoriales de API

Explicación del parámetro reCAPTCHA Data-S

El parámetro data-s es un token específico de la sesión que aparece en algunas implementaciones de reCAPTCHA, principalmente en propiedades propiedad de Google, como la Búsqueda de Google, YouTube y Google Play. Cuando esté presente, debe incluirse en su solicitud de API de solución; omitirlo provoca fallas de resolución o tokens no válidos. Esta guía explica qué es data-s, dónde aparece, cómo extraerlo y cómo pasarlo a CaptchaAI.


¿Qué es el parámetro data-s?

El parámetro data-s es un token de sesión generado por el servidor integrado en el widget HTML de reCAPTCHA. Vincula el desafío CAPTCHA a una sesión de servidor específica, evitando la reutilización de tokens en diferentes sesiones.

donde aparece

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

El atributo data-s se encuentra junto al estándar data-sitekey en el elemento reCAPTCHA <div>.

Características clave

Propiedad Valor
Formato Cadena codificada en Base64, 200-500 caracteres
Vida útil De un solo uso, vinculado a la carga de la página actual
Alcance Específico de la sesión, no se puede reutilizar entre cargas de páginas
Requerido Sí, cuando está presente: la resolución falla sin él.
Actualiza Nuevo valor en cada página load/refresh

Cuando los datos están presentes

El parámetro data-s NO está presente en la mayoría de las implementaciones de reCAPTCHA. Aparece principalmente en:

Sitio Presencia Notas
Búsqueda de Google (lo siento, tráfico /unusual) siempre Requerido para resolver CAPTCHA de Búsqueda de Google
YouTube A veces Aparece en ciertos flujos de verificación
** Google Play ** A veces Verificación de listado de aplicaciones
Formularios de Google Rara vez Implementaciones limitadas
Sitios de terceros que utilizan reCAPTCHA Casi nunca Las integraciones estándar no utilizan datos

Si NO está trabajando con propiedades propiedad de Google, probablemente no tenga que preocuparse por data-s. Si su solucionador devuelve tokens no válidos para un CAPTCHA de búsqueda de Google, la causa probable es que falta data-s.


Cómo funcionan técnicamente los datos

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

El parámetro data-s actúa esencialmente como un nonce: vincula el desafío CAPTCHA a una sesión específica del lado del servidor. El solucionador debe usar este valor al generar el token para que el token resultante coincida con la sesión esperada.


Extrayendo datos de la página

Extracción de 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
# }

Extracción de 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);

Extracción de selenio (para páginas dinámicas)

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

Resolviendo con data-s usando CaptchaAI

Cuando data-s esté presente, inclúyalo en su solicitud de API CaptchaAI:

pitón

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

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

Errores comunes en los datos

error Síntoma Solución
Omitir datos-s cuando están presentes La validación del token falla silenciosamente Siempre verifique el atributo data-s antes de enviar
Incluyendo datos cuando no están presentes Resolver error o solicitud rechazada Solo incluya data-s si el atributo existe en el widget
Reutilización de datos entre cargas de páginas Token no válido Extraiga datos nuevos para cada carga de página
Los datos de codificación de URL son incorrectos Parámetro mal formado Pase el valor base64 sin formato sin codificación adicional
Usando datos obsoletos (página cargada hace minutos) Discrepancia de tokens Extraiga los datos inmediatamente antes de enviarlos al solucionador

Ayudante de extracción de datos

Una utilidad reutilizable que maneja páginas reCAPTCHA con y sin datos:

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

Preguntas frecuentes

¿Siempre necesito datos para resolver reCAPTCHA?

No. El parámetro data-s solo aparece en un pequeño subconjunto de implementaciones de reCAPTCHA, principalmente propiedades propiedad de Google. Para sitios web estándar de terceros que utilizan reCAPTCHA, solo necesita sitekey y pageurl. Verifique siempre la presencia de data-s en el widget antes de decidir si incluirlo.

¿Qué sucede si incluyo datos cuando no son necesarios?

Algunos solucionadores pueden ignorar el parámetro adicional. Otros pueden devolver un error. Es una buena práctica incluir únicamente data-s cuando realmente exista en el widget reCAPTCHA de la página de destino.

¿Puedo almacenar en caché datos en varias soluciones?

No. El valor data-s es específico de la sesión y está vinculado a la carga de una sola página. Cada vez que carga la página CAPTCHA, se genera un nuevo valor data-s. Debe extraer un valor nuevo antes de cada solicitud de resolución.

¿Por qué mi resolución CAPTCHA de Búsqueda de Google falla incluso con la clave de sitio correcta?

Si está resolviendo un CAPTCHA de "tráfico inusual" de la Búsqueda de Google, la causa de falla más común es la falta del parámetro data-s. Los CAPTCHA de búsqueda de Google siempre incluyen data-s y la resolución fallará sin él. Extraiga el atributo data-s del elemento <div> del widget reCAPTCHA.


Resumen

El parámetro data-s es un token de enlace de sesión que se encuentra en implementaciones selectas de reCAPTCHA, principalmente propiedades propiedad de Google. Cuando esté presente, debe extraerlo del HTML del widget reCAPTCHA e incluirlo en suCaptchaAISolicitud de API. Siempre verifique data-s antes de enviar: inclúyalo cuando esté presente, omítalo cuando no esté. Específicamente para los CAPTCHA de búsqueda de Google, siempre se requiere data-s.

Artículos relacionados

Los comentarios están deshabilitados para este artículo.