Explainers

Persyaratan Cookie dan Sesi reCAPTCHA untuk Solve CAPTCHA

Pertanyaan yang paling sering muncul dari tim otomatisasi yang baru pindah ke solve berbasis API: apakah cookie browser tetap harus dikelola? Untuk sebagian besar implementasi reCAPTCHA, jawabannya tidak — CaptchaAI menghasilkan token di lingkungannya sendiri, lepas dari cookie apa pun di browser Anda. Namun pada situs dengan validasi ketat, salah satu dari lebih selusin cookie reCAPTCHA bisa menentukan token Anda diterima atau ditolak. Panduan ini memetakan cookie tersebut, efeknya ke skor risiko, dan kapan Anda perlu menanganinya.

Ringkasan cepat sebelum masuk ke detail:

  • Solve API CaptchaAI tidak butuh cookie — cukup sitekey dan pageurl.
  • reCAPTCHA sendiri memasang lebih dari selusin cookie untuk menilai risiko dan skor v3.
  • Cookie baru wajib dikelola kalau situs target memvalidasi kecocokan sesi browser.

Masalah Penyebab Solusi
reCAPTCHA v2 selalu menampilkan tantangan gambar Tidak ada cookie sesi, kepercayaan rendah Pertahankan cookie di seluruh permintaan
Skor reCAPTCHA v3 selalu di bawah 0,3 Sesi selalu baru Pertahankan cookie jar
Token berhasil sekali lalu gagal saat di-retry Cookie sesi tidak cocok Pakai sesi yang sama untuk memuat halaman dan submit
Muncul "Cookie/session validation failed" Situs memeriksa rantai cookie Pakai penyuntikan token berbasis browser
Widget reCAPTCHA tidak mau muncul Cookie pihak ketiga diblokir Izinkan cookie dari google.com

Chrome menghapus cookie pihak ketiga secara bertahap — ini berdampak pada reCAPTCHA karena _GRECAPTCHA ditetapkan di .google.com dan dibaca dari konteks pihak ketiga.

Respons Google:

  • reCAPTCHA v3 dan Enterprise memakai eksekusi JavaScript pihak pertama
  • Cookie bertransisi ke penyimpanan Partitioned (CHIPS)
  • Cookie rc:: sudah pihak pertama (ditetapkan di domain situs target)

Dampak ke otomatisasi:

  • Minimal — solve API tidak terpengaruh karena token dihasilkan di sisi server.
  • Otomatisasi browser mungkin mengalami sedikit pergeseran skor seiring Google menyesuaikan strategi 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)

Praktiknya: tanpa jejak cookie, reCAPTCHA v2 lebih sering menampilkan tantangan gambar dan skor v3 mulai rendah.

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)

Kebalikannya, sesi dengan riwayat cookie valid memulai dari baseline lebih tinggi — cookie jar persisten jadi pengungkit termudah untuk menaikkan skor v3.

Langkah cepat kalau skor mentok rendah:

  1. Cek apakah setiap run memulai sesi baru — aktifkan cookie jar persisten kalau ya.
  2. Bandingkan skor sebelum/sesudah beberapa run dengan cookie yang sama.

Pertahankan cookie di seluruh permintaan untuk membangun kepercayaan sesi:

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

Untuk tim otomatisasi Indonesia yang jalankan job dari VPS di ap-southeast-1 (Singapura) atau asia-southeast2 (Jakarta), cookie jar persisten meredam efek reconnect saat jaringan mobile-first putus. Kontraktor lepas dan agensi price-monitoring dengan batch besar paling merasakan manfaatnya.


Solver CaptchaAI menghasilkan token di lingkungannya sendiri — situs target memvalidasinya tanpa memeriksa cookie browser Anda. Namun sebagian implementasi menambahkan lapisan validasi ekstra.

Kasus umum: sitekey dan pageurl saja sudah cukup

Tidak ada penerusan cookie. CaptchaAI menghasilkan token valid hanya dengan sitekey dan pageurl:

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

Kasus situs dengan validasi sesi ketat

Sebagian situs dengan keamanan tinggi memvalidasi bahwa sesi pengirim token cocok dengan sesi yang memuat widget reCAPTCHA. Urutan kerjanya:

  1. Muat halaman di browser sungguhan untuk membangun cookie
  2. Ekstrak sitekey dari halaman yang sudah dimuat
  3. Kirim sitekey dan pageurl itu ke CaptchaAI
  4. Suntikkan token hasil solve ke sesi browser yang sama
  5. Submit form dari browser itu juga (rantai cookie tetap utuh)
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()

cookie Domain Tujuan Masa berlaku
_GRECAPTCHA .google.com Status reCAPTCHA lintas situs 6 bulan
rc::a Situs sasaran Data analisis risiko (canvas, hash perilaku mouse) Sesi
rc::b Situs sasaran Data analisis risiko (sinyal perilaku) Sesi
rc::c Situs sasaran Data analisis risiko (waktu) Sesi
rc::d-15# Situs sasaran Penyimpanan status tantangan Sesi
cookie Domain Tujuan Pengaruh skor
SID .google.com ID sesi Google +0,1 hingga +0,3
HSID .google.com ID sesi khusus HTTP Bagian dari kepercayaan sesi
SSID .google.com ID sesi aman Bagian dari kepercayaan sesi
NID .google.com Preferensi/sesi Google +0,05 hingga +0,1
1P_JAR .google.com Personalisasi iklan Google Sinyal kepercayaan kecil
cookie Domain Tujuan
CONSENT .google.com Status persetujuan cookie
AEC .google.com Cookie iklan terenkripsi
SOCS .google.com Pengaturan izin cookie

Cookie akun Google (SID, HSID, SSID) terhubung ke identitas pengguna — perlakukan sebagai data sensitif sesuai UU 27/2022 dan jangan simpan cookie milik akun orang lain.


Pertanyaan yang sering diajukan

Tidak, untuk implementasi standar. Token dihasilkan hanya dari sitekey dan pageurl, tanpa membaca cookie browser Anda, dan valid dikirim dari klien HTTP mana saja.

Kenapa skor reCAPTCHA v3 saya tetap rendah walau jaringan sudah bagus?

Skor v3 lebih ditentukan oleh riwayat cookie sesi (rc::, _GRECAPTCHA) daripada kualitas jaringan. Sesi baru tanpa riwayat cookie mulai dari baseline rendah (0,3–0,5) — pertahankan cookie jar di seluruh request untuk menaikkan baseline itu.

Ya — _GRECAPTCHA bertahan 6 bulan, rc:: hilang saat browser ditutup, dan cookie akun Google (SID, HSID) bertahan 2 tahun tapi bisa dicabut Google kapan saja. Simpan ke disk dan kunjungi ulang situs target secara berkala agar sesi tak dianggap kedaluwarsa di tengah batch job.

Sebagian iya — cookie akun Google (SID, HSID, SSID) terhubung ke identitas pengguna. Simpan dengan akses terbatas dan jangan pernah simpan cookie milik akun orang lain.

Hanya kalau situs memvalidasi kecocokan sesi widget dan pengirim token — muat halaman di browser asli, suntik token, submit dari sesi sama. Untuk mayoritas implementasi, solve API dari server sudah cukup.


Ringkasan

reCAPTCHA menyandarkan penilaian risiko pada tiga kelompok cookie: riwayat perilaku (rc::), kepercayaan lintas situs (_GRECAPTCHA), dan akun Google (SID, HSID). Solve API lewat CaptchaAI tidak memerlukan cookie — token dihasilkan dari sitekey dan pageurl saja. Cookie wajib dikelola hanya kalau situs target memvalidasi rantai sesi browser.

Artikel Terkait

Komentar dinonaktifkan untuk artikel ini.