Çin platformlarından veri toplarken karşınıza çıkan doğrulamalar Batı sitelerindekilerden farklıdır: Çince karakterli resim CAPTCHA'ları, Mandarin aritmetik soruları ve GeeTest v3 kaydırma bulmacaları. Kısa yanıt şu — CaptchaAI'nin Image/OCR, GeeTest v3 ve reCAPTCHA v2 çözücüleri bu bölgeye özgü doğrulamaları tek bir API üzerinden çözer; kodunuzu Çince'ye göre yeniden yazmanıza gerek kalmaz. Aşağıda hangi türle nerede karşılaşacağınızı ve her birini çalışan kodla nasıl çözeceğinizi bulacaksınız.
Çin sitelerinde hangi CAPTCHA türleriyle karşılaşırsınız
| CAPTCHA türü | Nerede görülür | CaptchaAI çözücü |
|---|---|---|
| Çince karakterli resim | Devlet portalları, akademik veritabanları | Image/OCR (language=2) |
| Çince aritmetik | Kayıt formları | Image/OCR |
| GeeTest v3 kaydırma bulmacası | Baidu, Bilibili ve birçok büyük platform | GeeTest v3 |
| Karaktere sırayla tıklama | "Çince karakterlere sırayla tıklayın" | Image/OCR (koordinat modu) |
| reCAPTCHA v2 | Uluslararası Çin siteleri | reCAPTCHA v2 |
Dürüst bir not: GeeTest v4 çözümü henüz kullanılamıyor (çok yakında) ve Tencent CAPTCHA gibi özel sağlayıcılar da desteklenen türler arasında değildir. İyi haber şu ki bu sitelerin çoğunda giriş noktasına göre desteklenen bir alternatif (GeeTest v3, reCAPTCHA v2 veya Image/OCR) bulunur.
Türkiye'den tipik bir senaryo
Türk e-ticaret ekiplerinin çoğu, ürün ve fiyat verisini Çinli tedarikçi portallarından takip eder. Bu portallarda oturum açarken ya da genel katalog sayfalarını gezerken Çince karakterli resim CAPTCHA'ları ve GeeTest v3 sık sık devreye girer. Yetkili ve halka açık veriyle çalışan bir veri toplama işinde, CAPTCHA çözümünü aşağıdaki Image/OCR akışına bağlamak, botunuzun her doğrulamada durmasını engeller.
Bir uyarı: Topladığınız veri kişisel bilgi (isim, iletişim bilgisi vb.) içeriyorsa, Türkiye'de bu veri KVKK kapsamına girer. CaptchaAI'yi yalnızca erişim yetkiniz olan ve KVKK ile uyumlu iş akışlarında kullanın.
Akışın genel mantığı
Tür ne olursa olsun, adımlar aynıdır:
- Görüntüyü veya GeeTest parametrelerini (
gt,challenge) sayfadan çıkarın. - Görevi
in.php'ye gönderin ve dönen görev kimliğini saklayın. - Sonuç hazır olana kadar
res.php'yi birkaç saniyede bir sorgulayın. - Dönen token'ı ilk isteğinizle aynı oturumda forma ekleyin.
Aşağıdaki Python ve Node.js örnekleri bu dört adımı olduğu gibi uygular.
Python: Çince karakterli resim CAPTCHA'sı
Çince resim CAPTCHA'ları genellikle 请输入验证码 ("lütfen doğrulama kodunu girin") gibi karakterler gösterir ve Çince metnin OCR ile tanınmasını gerektirir. Aşağıdaki fonksiyon görüntüyü base64 olarak gönderir, language=2 ile Çince karakter tanımayı açar ve token'ı res.php üzerinden sorgular. Aynı dosyada Baidu ve Bilibili'de sık görülen GeeTest v3 için de bir çözüm fonksiyonu yer alır.
import requests
import base64
import time
API_KEY = "YOUR_API_KEY"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_chinese_image_captcha(image_path: str) -> str:
"""Solve a Chinese character image CAPTCHA."""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2, # 2 = Chinese characters supported
"json": 1,
}, timeout=30).json()
if resp.get("status") != 1:
raise RuntimeError(f"Submit failed: {resp.get('request')}")
task_id = resp["request"]
start = time.monotonic()
while time.monotonic() - start < 120:
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
return poll["request"]
raise RuntimeError(f"Solve failed: {poll.get('request')}")
raise RuntimeError("Timeout")
def solve_chinese_captcha_from_url(captcha_url: str, cookies: dict = None) -> str:
"""Download and solve a Chinese CAPTCHA from a URL."""
session = requests.Session()
if cookies:
session.cookies.update(cookies)
resp = session.get(captcha_url, timeout=15)
image_b64 = base64.b64encode(resp.content).decode()
submit = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2,
"json": 1,
}, timeout=30).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit: {submit.get('request')}")
task_id = submit["request"]
for _ in range(24):
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
return poll["request"]
raise RuntimeError(f"Solve: {poll.get('request')}")
raise RuntimeError("Timeout")
# --- GeeTest on Chinese platforms ---
def solve_geetest_chinese(gt: str, challenge: str, pageurl: str) -> dict:
"""Solve GeeTest v3 commonly found on Baidu, Bilibili, etc."""
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "geetest",
"gt": gt,
"challenge": challenge,
"pageurl": pageurl,
"json": 1,
}, timeout=30).json()
if resp.get("status") != 1:
raise RuntimeError(f"Submit: {resp.get('request')}")
task_id = resp["request"]
for _ in range(36):
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
# GeeTest returns challenge, validate, seccode
return poll["request"]
raise RuntimeError(f"Solve: {poll.get('request')}")
raise RuntimeError("Timeout")
# Usage — Chinese government portal
text = solve_chinese_image_captcha("chinese_captcha.png")
print(f"Chinese CAPTCHA text: {text}")
# GeeTest on a Chinese platform
geetest_result = solve_geetest_chinese(
gt="b46d1900d0a894591f1561f8c35670a7",
challenge="dynamic_challenge_string",
pageurl="https://www.example.cn/login",
)
JavaScript: Çin sitesi CAPTCHA akışı
Node.js tarafında akış aynıdır: görüntüyü okuyun, in.php'ye gönderin ve token hazır olana kadar res.php'yi 5 saniyede bir sorgulayın. GeeTest için gt ve challenge değerlerini sayfadan çıkarıp aynı biçimde gönderirsiniz.
const API_KEY = "YOUR_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
const fs = require("fs");
async function solveChineseImageCaptcha(imagePath) {
const imageB64 = fs.readFileSync(imagePath, "base64");
const body = new URLSearchParams({
key: API_KEY,
method: "base64",
body: imageB64,
language: "2",
json: "1",
});
const resp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (resp.status !== 1) throw new Error(`Submit: ${resp.request}`);
const taskId = resp.request;
for (let i = 0; i < 24; i++) {
await new Promise((r) => setTimeout(r, 5000));
const url = `${RESULT_URL}?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const poll = await (await fetch(url)).json();
if (poll.request === "CAPCHA_NOT_READY") continue;
if (poll.status === 1) return poll.request;
throw new Error(`Solve: ${poll.request}`);
}
throw new Error("Timeout");
}
async function solveGeeTest(gt, challenge, pageurl) {
const body = new URLSearchParams({
key: API_KEY,
method: "geetest",
gt,
challenge,
pageurl,
json: "1",
});
const resp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (resp.status !== 1) throw new Error(`Submit: ${resp.request}`);
const taskId = resp.request;
for (let i = 0; i < 36; i++) {
await new Promise((r) => setTimeout(r, 5000));
const url = `${RESULT_URL}?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const poll = await (await fetch(url)).json();
if (poll.request === "CAPCHA_NOT_READY") continue;
if (poll.status === 1) return poll.request;
throw new Error(`Solve: ${poll.request}`);
}
throw new Error("Timeout");
}
// Usage
const text = await solveChineseImageCaptcha("chinese_captcha.png");
console.log(`Chinese text: ${text}`);
Çin sitelerini kazırken pratik ipuçları
Kod çalışsa bile üretimde tökezleten ayrıntılar genelde şunlardır:
- UTF-8 baştan sona: Karakterler bozuk görünüyorsa, istek ve yanıtlarda UTF-8 kodlamasını her katmanda sağlayın.
- Tek oturum: CAPTCHA görüntüsünü, formu göndereceğiniz oturumla aynı oturumda indirin; çerezler bu yüzden korunmalı.
- GeeTest parametreleri:
gtvechallengedeğerlerini sayfa betiklerinden veya API çağrılarından çıkarın. - İstek dağıtımı: Çin CDN'lerinde hız sınırına takılmamak için istekleri Çin bölgesindeki IP'lere sahip proxy'ler arasında dağıtın.
- Yeniden yükleme yok: CAPTCHA her yüklemede yenilendiği için görüntüyü bir kez indirin, çözün ve gönderin; sayfayı tazelemeyin.
Sorun giderme
Çince CAPTCHA'larda en sık görülen hatalar kodlama ve oturum yönetiminden kaynaklanır. Aşağıdaki tablo belirti, sebep ve çözümü bir arada verir:
| Sorun | Sebep | Çözüm |
|---|---|---|
| Sonuçta bozuk Çince karakterler | Kodlama uyuşmazlığı | Yanıtı UTF-8 olarak çözdüğünüzden emin olun |
GeeTest challenge'ın süresi doldu |
challenge'ın TTL'si kısadır | Sayfayı yükledikten birkaç saniye içinde çıkarıp gönderin |
| Resim CAPTCHA yanlış metin döndürüyor | Çince ve Latin karakter karışımı | Çince karakter tanıma için language=2 ayarlayın |
| Çözümden sonra oturum reddediliyor | Çerezler korunmuyor | CAPTCHA alımı ve form gönderimi için aynı oturumu kullanın |
| Devlet sitelerinde çözüm oranı düşük | Karmaşık karakter render'ı | Daha yüksek çözünürlüklü CAPTCHA görüntüleri doğruluğu artırır |
Maliyet: thread başına, sabit USD
CaptchaAI çözüm başına değil, eşzamanlı thread başına ücretlendirir ve her planda thread başına sınırsız çözüm sunar. Tek bir bot veya küçük bir kazıma işi için BASIC ($15/ay, 5 thread) başlangıçta yeterlidir; paralel oturum sayınız arttıkça ADVANCE ($90/ay, 50 thread) gibi daha fazla thread'li bir plana geçebilirsiniz. TL'nin dalgalı olduğu bir ortamda fiyatların USD ve aylık sabit olması bütçeyi öngörülebilir kılar; Çince CAPTCHA'lar için ek bir tür ücreti yoktur.
Sık sorulan sorular
Çince karakterli resim CAPTCHA'sını çözmek ne kadar sürer?
Image/OCR çözümleri genellikle birkaç saniye içinde döner; kesin süre görüntü karmaşıklığına ve o anki yüke göre değişir. Örnek kodda sonucu res.php üzerinden 5 saniyede bir sorguluyoruz ve token hazır olduğunda döndürüyoruz.
GeeTest v4 kullanan Çin siteleri için ne yapmalıyım?
GeeTest v4 çözümü henüz kullanılamıyor (çok yakında). Bir sitede v4 ile karşılaşırsanız, aynı sitenin desteklenen bir doğrulama türü (GeeTest v3, reCAPTCHA v2 veya Image/OCR) sunan bir giriş yolu olup olmadığını kontrol edin; çoğu platformda desteklenen bir alternatif bulunur.
Sonuçta Çince karakterler neden bozuk çıkıyor?
Neredeyse her zaman kodlama uyuşmazlığından kaynaklanır. İstemcinizin yanıtı UTF-8 olarak çözdüğünden ve görüntüyü indirdiğiniz oturumla formu gönderdiğiniz oturumun aynı olduğundan emin olun. language=2 ayarı da Çince karakter tanımayı açar.
Çin siteleri için hangi CaptchaAI planı yeterli?
Bu, eşzamanlı iş yükünüze bağlıdır. Tek bir bot veya küçük bir kazıma işi için BASIC ($15/ay, 5 thread) genellikle yeterlidir; paralel çok sayıda oturum çalıştırıyorsanız ADVANCE ($90/ay, 50 thread) gibi daha fazla thread'li bir plana geçin. Tüm planlarda thread başına çözüm sınırsızdır.
İlgili makaleler
- reCAPTCHA v2 callback sorununu API ile çözme
- Ruby ile CaptchaAI API üzerinden CAPTCHA çözme
- Scala ile CaptchaAI API üzerinden CAPTCHA çözme
Sonraki adımlar
Çin sitelerindeki CAPTCHA'ları çözmeye başlayın — CaptchaAI API anahtarınızı alın ve yukarıdaki Image/OCR ve GeeTest v3 akışlarını iş akışınıza ekleyin.
İlgili kılavuzlar: