Solusi CAPTCHA hadir dalam dua bentuk: tokens yang Anda masukkan ke dalam submit formulir, dan cookie yang memberikan akses tingkat sesi. Memilih pendekatan yang tepat bergantung pada CAPTCHA yang Anda hadapi dan bagaimana situs target memvalidasinya.
Sekilas
| Aspek | Berbasis token | Berbasis cookie |
|---|---|---|
| Keluaran | Token string (500+ karakter) | Cookie browser (qa_validation_cookie, dll.) |
| Digunakan untuk | reCAPTCHA v2/v3, hCaptcha, Turnstile | halaman Cloudflare Challenge |
| Bagaimana cara penggunaannya | Dimasukkan ke dalam bidang formulir atau badan POST | Dikirim dengan permintaan HTTP berikutnya |
| Seumur hidup | 60-120 detik | 30 menit hingga 24 jam |
| Dapat digunakan kembali | Tidak (sekali pakai) | Ya (untuk durasi sesi) |
| Diperlukan peramban | Hanya untuk ekstraksi | Untuk penyelesaiannya (diperlukan browser lengkap) |
Pemecahan berbasis token
Bagaimana cara kerjanya
- Ekstrak sitekey dari halaman
- Kirimkan sitekey + URL halaman ke CaptchaAI
- Menerima string token
- Masukkan token ke dalam bidang formulir tersembunyi
- Kirimkan formulirnya
CAPTCHA mana yang menggunakan token
- reCAPTCHA v2: Token masuk ke textarea
g-recaptcha-response - reCAPTCHA v3: Bidang yang sama, tetapi juga memerlukan
action(danenterprise=1untuk sitekey Enterprise) - hCaptcha: Token masuk ke
h-captcha-response - Turnstile: Token masuk ke
cf-turnstile-response
Implementasi
import requests
import time
API_KEY = "YOUR_API_KEY"
# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAAAPBMR...",
"pageurl": "https://staging.example.com/qa-login",
"json": "1",
}).json()
task_id = resp["request"]
# 2. Poll
token = None
for _ in range(24):
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["status"] == 1:
token = result["request"]
break
# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
"email": "user@example.com",
"password": "password",
"g-recaptcha-response": token,
})
Karakteristik utama
- Tidak diperlukan browser untuk submit: Anda dapat memasukkan token langsung ke permintaan HTTP POST
- Berumur pendek: Token akan expiry dalam 60-120 detik — selesaikan dan gunakan segera
- Sekali pakai: Setiap token berfungsi satu kali; selesaikan lagi untuk setiap submit formulir
- Validasi sisi server: Situs target mengirimkan token ke Google/Cloudflare/hCaptcha untuk verifikasi
Pemecahan berbasis cookie
Bagaimana cara kerjanya
- Halaman tantangan disajikan (Cloudflare Challenge, JS Challenge)
- Browser memecahkan tantangan ini (mungkin melibatkan Turnstile secara internal)
- Server menetapkan cookie sesi (
qa_validation_cookie) - Semua permintaan berikutnya dengan cookie tersebut melewati tantangan
CAPTCHA mana yang menggunakan cookie
- Halaman Cloudflare Challenge: cookie
qa_validation_cookie - Tantangan JS: Tantangan khusus Cloudflare JavaScript
- Beberapa tantangan WAF: Berbagai Firewall Aplikasi Web
Implementasi
from selenium import webdriver
import requests
import time
# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")
# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10) # Or use CaptchaAI pengaturan token
# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_validation_cookie = next(
(c for c in cookies if c["name"] == "qa_validation_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()
# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})
for cookie in cookies:
session.cookies.set(cookie["name"], cookie["value"])
# All requests now pass the challenge
for page in range(1, 50):
resp = session.get(f"https://example.com/api/data?page={page}")
print(f"Page {page}: {resp.status_code}")
Karakteristik utama
- Perlu browser untuk menyelesaikannya: Tantangan ini memerlukan lingkungan browser lengkap
- Umur panjang: Cookies bertahan 30 menit hingga 24 jam
- Dapat digunakan kembali: Satu penyelesaian memberikan akses ke banyak permintaan
- Terikat IP: Cookie dikaitkan dengan IP yang menyelesaikan tantangan
- Terikat UA: User-Agent harus cocok dengan yang digunakan selama penyelesaian
Kapan menggunakan yang mana
| Skenario | Pendekatan | Mengapa |
|---|---|---|
| Formulir masuk dengan reCAPTCHA | Tanda | Kirim token dengan data formulir |
| Scraping situs yang dilindungi Cloudflare | cookie | Satu penyelesaian, banyak permintaan halaman |
| submit formulir dengan Turnstile | Tanda | Suntikkan ke cf-turnstile-response |
| Mengakses API di belakang Cloudflare | cookie | Gunakan kembali cookie untuk semua panggilan API |
| Mengirimkan berbagai formulir | Token (setiap kali) | Setiap formulir membutuhkan token baru |
| Scraping massal domain yang sama | cookie | Selesaikan sekali, kikis hingga cookie habis masa berlakunya |
Pendekatan hibrida
Beberapa situs menggunakan keduanya: halaman Cloudflare Challenge (cookie) yang melindungi formulir yang memiliki reCAPTCHA (token).
# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")
# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)
# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")
# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
"data": "value",
"g-recaptcha-response": token,
})
Ringkasan perbandingan
| Fitur | Tanda | cookie |
|---|---|---|
| Selesaikan biaya | Per submit formulir | Per sesi (diamortisasi) |
| Selesaikan waktu | 10-30 detik per token | 10-30 detik sekali |
| Permintaan per penyelesaian | 1 | Banyak (sampai habis masa berlakunya) |
| Fleksibilitas IP | Token berfungsi dari IP apa pun | Cookie terkait dengan penyelesaian IP |
| Peramban untuk digunakan | Tidak diperlukan | Tidak diperlukan (hanya cookie) |
| Risiko kadaluarsa | 60-120an | 30 menit - 24 jam |
Pertanyaan Umum
Bisakah saya mengubah CAPTCHA berbasis token menjadi berbasis cookie?
Tidak. Pendekatannya bergantung pada cara situs memvalidasi. reCAPTCHA selalu menggunakan token; Cloudflare Challenge selalu menggunakan cookie.
Mana yang lebih murah untuk Scraping volume tinggi?
Berbahan dasar cookie jauh lebih murah bila tersedia. Satu penyelesaian mencakup ribuan permintaan. Berbasis token memerlukan penyelesaian per submit formulir.
Apakah CaptchaAI menangani keduanya?
Ya. CAPTCHA berbasis token mengembalikan string token. Untuk halaman Cloudflare Challenge, Anda dapat menggunakan pemecah Turnstile untuk mendapatkan token yang diperlukan untuk menyelesaikan tantangan, lalu mengekstrak cookie yang dihasilkan.
Selesaikan CAPTCHA dengan CaptchaAI
Dapatkan kunci API Anda dicaptchaai.com.
Panduan terkait
- Panduan Cookie Cloudflare Challenge qa_validation_cookie
- Mengekstrak Parameter reCAPTCHA
- Turnstile vs hCaptcha vs reCAPTCHA