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/exceptbloğ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:
- Çerezlerin oluşması için sayfayı gerçek bir tarayıcıda açın
sitekeydeğerini yüklenen sayfadan okuyunsitekeyvepageurlile CaptchaAI'ye gönderin- Dönen token'ı aynı tarayıcı oturumuna enjekte edin
- 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.