深度解析

reCAPTCHA Cookie 和会话解决要求

reCAPTCHA 依赖 cookie 进行会话跟踪、风险评分和挑战状态管理。丢失或错误处理 cookie 会导致解决失败、低分和重复挑战。本指南涵盖了 reCAPTCHA 使用的每个 cookie、会话如何影响评分以及用于自动化的实用 cookie 管理。


曲奇饼 领域 目的 寿命
_GRECAPTCHA .google.com 跨站点 reCAPTCHA 状态 6个月
rc::a 目标站点 风险分析数据(画布、鼠标行为哈希) 会议
rc::b 目标站点 风险分析数据(行为信号) 会议
rc::c 目标站点 风险分析数据(时间) 会议
rc::d-15# 目标站点 挑战状态持久性 会议
曲奇饼 领域 目的 分数影响
SID .google.com 谷歌会话 ID +0.1 至 +0.3
HSID .google.com 仅 HTTP 会话 ID 会话信任的一部分
SSID .google.com 安全会话 ID 会话信任的一部分
NID .google.com Google 偏好/session +0.05 至 +0.1
1P_JAR .google.com 谷歌广告个性化 次要信任信号
曲奇饼 领域 目的
CONSENT .google.com Cookie 同意状态
AEC .google.com 加密广告 cookie
SOCS .google.com Cookie 同意设置

New browser session, all cookies cleared
    ↓
reCAPTCHA JavaScript loads
    ↓
No _GRECAPTCHA → First-time visitor signal
No SID/HSID → No Google account trust
No rc:: cookies → No behavioral history
    ↓
Starting risk score: lower baseline (0.3-0.5 for v3)
    ↓
Behavioral analysis must compensate for lack of history
    ↓
Result: More likely to receive visible challenge (v2)
         Lower score (v3)
Existing browser session with cookies
    ↓
reCAPTCHA JavaScript loads
    ↓
_GRECAPTCHA found → Returning visitor
SID/HSID found → Google account trust
rc:: cookies found → Previous behavioral data
    ↓
Starting risk score: higher baseline (0.5-0.7 for v3)
    ↓
Behavioral analysis reinforces cookie-based trust
    ↓
Result: More likely to auto-pass (v2)
         Higher score (v3)

跨请求维护 cookie 以建立会话信任:

import requests
import pickle
import os

class CookieManager:
    """Manage cookies for reCAPTCHA sessions."""

    def __init__(self, cookie_file="cookies.pkl"):
        self.cookie_file = cookie_file
        self.session = requests.Session()
        self.load_cookies()

    def load_cookies(self):
        """Load cookies from disk if they exist."""
        if os.path.exists(self.cookie_file):
            with open(self.cookie_file, "rb") as f:
                self.session.cookies = pickle.load(f)

    def save_cookies(self):
        """Save cookies to disk for next session."""
        with open(self.cookie_file, "wb") as f:
            pickle.dump(self.session.cookies, f)

    def visit_page(self, url):
        """Visit a page to collect cookies."""
        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(url, headers=headers, timeout=15)
        self.save_cookies()
        return response

    def get_recaptcha_cookies(self):
        """Get cookies relevant to reCAPTCHA."""
        relevant = {}
        for cookie in self.session.cookies:
            if cookie.name in ["_GRECAPTCHA", "SID", "HSID", "SSID", "NID"]:
                relevant[cookie.name] = {
                    "value": cookie.value[:20] + "...",
                    "domain": cookie.domain,
                    "expires": cookie.expires,
                }
            if cookie.name.startswith("rc::"):
                relevant[cookie.name] = {
                    "value": cookie.value[:20] + "...",
                    "domain": cookie.domain,
                }
        return relevant


# Usage
cm = CookieManager("recaptcha_session.pkl")
cm.visit_page("https://staging.example.com/qa-login")  # Build cookies
print(cm.get_recaptcha_cookies())
from selenium import webdriver
import json

def setup_cookies(driver, cookie_file="selenium_cookies.json"):
    """Load and apply saved cookies to a Selenium session."""
    if not os.path.exists(cookie_file):
        return

    with open(cookie_file, "r") as f:
        cookies = json.load(f)

    for cookie in cookies:
        # Selenium requires the domain to match current page
        try:
            driver.add_cookie(cookie)
        except Exception:
            pass  # Skip cookies for different domains

def save_cookies(driver, cookie_file="selenium_cookies.json"):
    """Save current cookies for future sessions."""
    cookies = driver.get_cookies()
    with open(cookie_file, "w") as f:
        json.dump(cookies, f)

# Usage
driver = webdriver.Chrome()
driver.get("https://example.com")
setup_cookies(driver)  # Apply saved cookies
driver.refresh()       # Reload with cookies

# After CAPTCHA solving...
save_cookies(driver)   # Save for next run
const puppeteer = require("puppeteer");
const fs = require("fs");

async function manageCookies(page, cookieFile = "cookies.json") {
    // Load cookies if file exists
    if (fs.existsSync(cookieFile)) {
        const cookies = JSON.parse(fs.readFileSync(cookieFile));
        await page.setCookie(...cookies);
    }

    // Save cookies after page interaction
    const saveCookies = async () => {
        const cookies = await page.cookies();
        fs.writeFileSync(cookieFile, JSON.stringify(cookies, null, 2));
    };

    return { saveCookies };
}

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();

    const { saveCookies } = await manageCookies(page);

    await page.goto("https://staging.example.com/qa-login");

    // ... solve CAPTCHA ...

    await saveCookies();
    await browser.close();
})();

基于 API 的解决方案的会话要求

使用 CaptchaAI 时,求解器在其自己的环境中生成令牌。目标网站验证令牌而不检查浏览器的 cookie。然而,一些实现添加了额外的验证:

标准 reCAPTCHA(大多数站点)

无需 cookie 转发。 CaptchaAI 仅使用 sitekeypageurl 生成有效令牌:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Standard solve — no cookies needed
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1,
})

一些高安全性站点会验证提交令牌的会话是否与加载 reCAPTCHA 小部件的会话匹配。在这些情况下:

  1. 在真实浏览器中加载页面以建立cookie
  2. 从加载的页面中提取 sitekey
  3. 使用 sitekey 和 pageurl 提交到 CaptchaAI
  4. 将返回的token 提交同一个浏览器会话中
  5. 从浏览器提交表单(维护cookie链)
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

API_KEY = "YOUR_API_KEY"

# Step 1: Load page in real browser (establishes cookies)
driver = webdriver.Chrome()
driver.get("https://secure-site.com/login")

# Step 2: Extract sitekey
widget = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]")
sitekey = widget.get_attribute("data-sitekey")

# Step 3: Solve via CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": driver.current_url,
    "json": 1,
})
task_id = submit.json()["request"]

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"]
        break

# Step 4: Inject token into browser session (same cookies)
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# Step 5: Submit form from same browser session
driver.find_element(By.CSS_SELECTOR, "form").submit()

Chrome 正在逐步淘汰第三方 cookie。这会影响 reCAPTCHA,因为 _GRECAPTCHA 是在 .google.com 上设置的并从第三方上下文中读取。

谷歌的回应:

  • reCAPTCHA v3 和 Enterprise 使用第一方 JavaScript 执行
  • Cookie 正在转换为 Partitioned (CHIPS) 存储
  • rc:: cookie 已经是第一方(在目标站点的域上设置)

对自动化的影响:

  • 最小。基于 API 的解决不受影响,因为 CaptchaAI 在服务器端生成令牌。
  • 随着 Google 调整其 cookie 策略,基于浏览器的自动化可能会出现较小的分数变化。

问题 原因 解决方案
reCAPTCHA v2总是表现出形象挑战 无会话cookie,信任度低 跨请求保留 cookie
reCAPTCHA v3 分数始终 < 0.3 每次都有新鲜的会话 维护 cookie 罐
令牌有效一次,重试时失败 会话 cookie 不匹配 使用同一会话进行页面加载和提交
“Cookie/session 验证失败” 站点检查 cookie 链 使用基于浏览器的token 提交
reCAPTCHA 小部件未加载 第三方 cookie 被阻止 允许 google.com cookie

常见问题

不会。CaptchaAI 在自己优化的环境中生成令牌,不需要您的浏览器 cookie。您只需提供sitekeypageurl即可。生成的令牌对于任何客户端提交都有效。

是的。 _GRECAPTCHA 持续 6 个月,但 rc:: 会话 cookie 在浏览器关闭时过期。 Google 帐户 cookie(SIDHSID)过去 2 年,但 Google 可能会使其失效。为了实现自动化,请将 cookie 保存到磁盘并通过访问目标站点定期刷新它们。

是的,有限制。 Cookie 可以导出(作为 JSON 或 Netscape 格式)并导入到请求、Selenium 或 Puppeteer 会话中。但是,浏览器特征会有所不同,reCAPTCHA 可能会检测到。 Cookie 提供了信任奖励,但新的浏览器环境可能会抵消它。

清除 cookie 会删除 _GRECAPTCHA 信任 cookie 和 rc:: 行为历史记录 cookie。 reCAPTCHA 将您视为没有历史记录的全新访客,从较低的基线开始风险评分。这就是为什么隐身 /private 浏览经常会引发更多验证码挑战的原因。


概括

reCAPTCHA 使用 cookie 进行会话跟踪(rc:: cookie)、跨站点信任(_GRECAPTCHA)和 Google 帐户链接(SIDHSID)。没有饼干的新会话会产生较低的分数和更难的挑战。对于基于 API 的求解CaptchaAI,不需要 cookie — 求解器仅使用 sitekey 和页面 URL 生成有效令牌。对于依赖于 cookie 的实现,请使用基于浏览器的方法:加载页面(建立 cookie),通过 CaptchaAI 求解,注入令牌,然后从同一浏览器会话提交。

相关文章

该文章已禁用评论。