Explainers

Çözüm için reCAPTCHA Çerez ve Oturum Gereksinimleri

Kısa cevap: CaptchaAI API'sine çerez göndermenize gerek yok — sitekey ve pageurl yeterlidir. Çerezler sizi yalnızca iki yerde etkiler:

  • Tarayıcı tabanlı akışlarda: oturum geçmişi reCAPTCHA'nın başlangıç risk puanını belirler.
  • Oturum eşleştirmesi yapan formlarda: token'ı gönderen oturum, widget'ı yükleyen oturumla aynı olmalıdır.

Bu iki durum, "token geçerli ama form reddediyor" şikâyetlerinin neredeyse tamamını açıklar.


Hızlı teşhis: belirti, sebep, çözüm

Çerez kaynaklı arızalar pratikte beş kalıba iniyor:

Sorun Sebep Çözüm
reCAPTCHA v2 her seferinde görsel doğrulama gösteriyor Oturum çerezi yok, güven düşük Çerezleri istekler arasında kalıcı hale getirin
reCAPTCHA v3 puanı sürekli 0,3'ün altında Her çalışmada sıfırdan oturum Çerez deposunu koruyun ve düzenli yenileyin
Token bir kez çalışıyor, yeniden denemede başarısız Oturum çerezi uyuşmazlığı Sayfa yükleme ve gönderim için aynı oturumu kullanın
"Çerez/oturum doğrulaması başarısız" Site çerez zincirini kontrol ediyor Tarayıcı içinde token enjeksiyonuna geçin
reCAPTCHA widget'ı hiç yüklenmiyor Üçüncü taraf çerezleri engelli google.com çerezlerine izin verin

Çerez adlarının tam listesi yazının sonundaki referans tablolarında.


Çerezler risk puanını nasıl değiştirir?

reCAPTCHA her yüklemede sıfırdan başlamaz: geçmişe göre bir başlangıç puanı belirler, davranışsal analiz bunun üzerine eklenir.

Sıfırdan açılan oturum (çerez yok)

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)

Geçmişi olan oturum (çerezlerle)

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)

Aradaki fark, v2'de görsel doğrulamanın çıkmasına, v3'te puanın site eşiğinin altında kalmasına karşılık gelir.


Üçüncü taraf çerez engellemesi bu dengeyi bozar mı?

Chrome üçüncü taraf çerezlerini aşamalı olarak devre dışı bırakıyor. _GRECAPTCHA .google.com alanında yazılıp üçüncü taraf bağlamında okunduğu için bu doğrudan reCAPTCHA'yı ilgilendiriyor.

Google tarafındaki karşılık:

  • reCAPTCHA v3 ve Enterprise birinci taraf JavaScript yürütmesine dayanıyor
  • Çerezler Partitioned (CHIPS) depolamaya taşınıyor
  • rc:: çerezleri zaten birinci taraf (hedef sitenin alan adında yazılıyor)

Otomasyon tarafındaki karşılık:

  • API tabanlı çözüm etkilenmez; CaptchaAI token'ı sunucu tarafında üretir.
  • Tarayıcı tabanlı akışlar, Google çerez stratejisini güncellerken küçük puan dalgalanmaları görebilir.

Otomasyonda çerez yönetimi

Yöntem 1: Diske yazılan kalıcı çerez deposu

İstekler arasında çerezleri koruyarak oturum geçmişi biriktirin:

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())

Yöntem 2: Selenium oturumuna çerez aktarma

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

Yöntem 3: Puppeteer'da çerez aktarma

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

Üç yöntemde de iki kural geçerli:

  • Çerez dosyasını sayfa yüklendikten sonra kaydedin, sonraki koşuda alan adına gittikten sonra uygulayın.
  • Selenium alan adı eşleşmeyen çerezleri reddeder; yukarıdaki try/except bloğunun sebebi budur.

API tabanlı çözümde oturum gereksinimleri

Token çözücünün kendi ortamında üretilir; hedef site doğrularken sizin çerezlerinize bakmaz. Yine de iki senaryo var.

Standart reCAPTCHA kurulumları (sitelerin çoğu)

Çerez aktarmaya gerek yok. sitekey ve pageurl ile geçerli bir token alırsınız:

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,
})

Oturumu token'la eşleştiren uygulamalar

Bazı yüksek güvenlikli formlar, token'ı gönderen oturumun widget'ı yükleyen oturumla aynı olduğunu doğrular. Sıra şudur:

  1. Çerezlerin oluşması için sayfayı gerçek bir tarayıcıda açın
  2. sitekey değerini yüklenen sayfadan okuyun
  3. sitekey ve pageurl ile CaptchaAI'ye gönderin
  4. Dönen token'ı aynı tarayıcı oturumuna enjekte edin
  5. Formu aynı tarayıcıdan gönderin (çerez zinciri korunur)
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()

Kritik nokta dördüncü adımda: token'ı g-recaptcha-response alanına yazdıktan sonra formu aynı driver örneğinden gönderin. Ayrı bir requests oturumu çerez zincirini koparır.


Yerel örnek: e-ticaret ödeme adımı regresyon testleri

Türkiye'de otomasyon işi büyük ölçüde e-ticaret ve fintech entegrasyonu demek; en sık test edilen akış da giriş ve ödeme adımı. Staging ortamınızda gece çalışan bir regresyon paketi düşünün: her koşu temiz bir Chrome profiliyle açıldığı için _GRECAPTCHA ve rc:: hiç oluşmuyor, v2 widget'ı da neredeyse her seferinde görsel doğrulamaya düşüyor. İki müdahale yeter:

  • Çerez deposunu koşular arasında saklayın.
  • Doğrulamayı CaptchaAI ile çözüp token'ı aynı oturuma enjekte edin.

Paralel koşu sayınız plan seçiminizi belirler: beş eşzamanlı tarayıcı için BASIC ($15/ay, 5 thread), onlarca senaryo koşan bir paket için ADVANCE ($90/ay, 50 thread). Faturalama thread başınadır, çözüm sayısı sınırsızdır — TL kurundan bağımsız, sabit bir aylık maliyet demek.

Hatırlatma: sakladığınız oturum verisi gerçek kullanıcılara aitse KVKK kapsamına girer. Çerez depolarını kendi test hesaplarınızla sınırlı tutun.


Referans: hangi çerez ne işe yarar?

reCAPTCHA'nın kendi çerezleri

Çerez Etki alanı Amaç Ömür
_GRECAPTCHA .google.com Siteler arası reCAPTCHA durumu 6 ay
rc::a Hedef site Risk analizi verisi (canvas, fare hareketi karması) Oturum
rc::b Hedef site Risk analizi verisi (davranışsal sinyaller) Oturum
rc::c Hedef site Risk analizi verisi (zamanlama) Oturum
rc::d-15# Hedef site Doğrulama durumunun kalıcılığı Oturum

Puanı etkileyen Google hesabı çerezleri

Çerez Etki alanı Amaç Puana etkisi
SID .google.com Google oturum kimliği +0,1 ila +0,3
HSID .google.com Yalnızca HTTP oturum kimliği Oturum güveninin parçası
SSID .google.com Güvenli oturum kimliği Oturum güveninin parçası
NID .google.com Google tercihi/oturumu +0,05 ila +0,1
1P_JAR .google.com Google reklam kişiselleştirmesi Küçük güven sinyali

reCAPTCHA'nın okuduğu üçüncü taraf çerezleri

Çerez Etki alanı Amaç
CONSENT .google.com Çerez izin durumu
AEC .google.com Şifrelenmiş reklam çerezi
SOCS .google.com Çerez izni ayarları

Günlük işte iki isim yeter:

  • _GRECAPTCHA — siteler arası tanıma sinyali.
  • rc:: ailesi — hedef sitenin alan adında tutulan davranış geçmişi.

Sık sorulan sorular

Gizli sekmede neden daha sık CAPTCHA çıkıyor?

Gizli pencere _GRECAPTCHA güven çerezini ve rc:: davranış geçmişini taşımaz; reCAPTCHA sizi geçmişi olmayan yeni bir ziyaretçi sayıp puanı daha düşük bir tabandan başlatır. Aynısı, her koşuda temiz profil açan test paketleri için de geçerlidir.

Sunucuda tarayıcı çalıştırmadan, sadece requests ile çözebilir miyim?

Sitelerin çoğunda evet. sitekey ve pageurl bilgisini sayfanın HTML'inden okur, CaptchaAI'ye gönderir, dönen token'ı g-recaptcha-response alanına eklersiniz. Tarayıcı yalnızca oturum eşleştirmesi yapan sitelerde gerekir.

Aldığım token'ı başka bir makineden gönderebilir miyim?

Kural olarak evet: token istemciye bağlı değildir. İstisna, oturum eşleştirmesi yapan uygulamalar. Token'ın ömrü kısadır, iki dakika içinde kullanın.

Çerezleri diskte saklamak KVKK açısından sorun yaratır mı?

Kendi test hesaplarınıza ait çerezleri kendi ortamınızda saklamak sorun değildir. Gerçek kullanıcı oturumlarına ait veriler ise kişisel veri sayılır ve KVKK kapsamına girer: saklama süresi, erişim kontrolü ve amaç sınırlaması gerekir.

reCAPTCHA v3 puanım hep düşük, sorun sadece çerezler mi?

Hayır. Çerezler başlangıç puanını belirler; üzerine sayfadaki etkileşim süresi, istek düzeni ve IP itibarı eklenir. Puan hâlâ eşiğin altındaysa istekler arasındaki gecikmeleri gözden geçirin.


Özet

Çerezsiz açılan oturum daha düşük puanla başlar; kalıcı çerez deposu bunu düzeltir. CaptchaAI ile API üzerinden çözerken çerez aktarmanız gerekmez. Oturum eşleştirmesi yapan formlarda akış nettir: sayfayı tarayıcıda açın, çözün, token'ı enjekte edin, aynı oturumdan gönderin.

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.