GeeTest v3, slayt bulmacaları, simge seçimleri veya kelime eşleştirme gibi etkileşimli zorluklar sunar. ReCAPTCHA'dan farklı olarak GeeTest, çözmeden önce sayfadan çıkarmanız gereken üç parametreye (gt, challenge, api_server) sahip özel bir doğrulama akışı kullanır.
Bu kılavuz, GeeTest parametrelerinin çıkarılması ve CaptchaAI API ile sorunun çözülmesine ilişkin tüm süreci anlatmaktadır.
Gereksinimler
| Öğe | Değer |
|---|---|
| CaptchaAI API anahtarı | İtibarencaptchaai.com |
GeeTest gt değeri |
Statik site başına tanımlayıcı |
GeeTest challenge |
Dinamik oturum başına değer |
| Sayfa URL'si | GeeTest'in göründüğü URL |
| Dil | Python 3.7+ veya Node.js 14+ |
Adım 1: GeeTest parametrelerini çıkarın
GeeTest üç parametre gerektirir. gt statiktir (her istek için aynıdır), challenge ise oturum başına değişir.
Yöntem 1: Ağ sekmesi
- DevTools → Ağ sekmesini açın
register-slideveyagettype.phpveyaget.php'ye göre filtrele- Captcha'yı tetikleyin ve başlatma isteğini arayın
- Yanıt
gt,challengeve bazenapi_server'yi içerir
{
"success": 1,
"gt": "019924a82c70bb123aae90d483087f94",
"challenge": "12345678abc90def12345678abc90def",
"new_captcha": true
}
Yöntem 2: Sayfa kaynağı
// Search page source for initGeetest or gt value
document.querySelectorAll('script').forEach(s => {
if (s.textContent.includes('initGeetest')) {
console.log(s.textContent);
}
});
Yöntem 3: API uç noktası
Birçok site GeeTest parametrelerini kendi API'lerinden alır:
# The site's registration endpoint
params_response = requests.get("https://example.com/api/captcha/register")
data = params_response.json()
gt = data["gt"]
challenge = data["challenge"]
Adım 2: Görevi CaptchaAI'ye gönderin
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "geetest",
"gt": "019924a82c70bb123aae90d483087f94",
"challenge": "12345678abc90def12345678abc90def",
"api_server": "api.geetest.com", # Optional, use if site specifies
"pageurl": "https://staging.example.com/qa-login",
"json": 1
})
data = response.json()
if data.get("status") != 1:
raise Exception(f"Submit error: {data.get('request')}")
task_id = data["request"]
print(f"Task submitted: {task_id}")
Node.js
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
async function submitGeeTest(gt, challenge, pageurl) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: API_KEY,
method: 'geetest',
gt,
challenge,
api_server: 'api.geetest.com',
pageurl,
json: 1
}
});
if (data.status !== 1) throw new Error(`Submit error: ${data.request}`);
return data.request;
}
3. Adım: Çözüm için anket yapın
GeeTest çözümü üç değer döndürür: challenge, validate ve seccode.
Python
def get_geetest_solution(task_id):
for attempt in range(30):
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:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result.get('request')}")
raise Exception("Timeout")
solution = get_geetest_solution(task_id)
# solution = {
# "geetest_challenge": "12345678abc90def12345678abc90def1a",
# "geetest_validate": "abcdef1234567890abcdef1234567890",
# "geetest_seccode": "abcdef1234567890abcdef1234567890|jordan"
# }
Node.js
async function getGeeTestSolution(taskId) {
for (let i = 0; i < 30; i++) {
await new Promise(r => setTimeout(r, 5000));
const { data } = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
});
if (data.status === 1) return data.request;
if (data.request !== 'CAPCHA_NOT_READY') throw new Error(data.request);
}
throw new Error('Timeout');
}
4. Adım: Çözümü hedef siteye gönderin
Üç değeri de sitenin doğrulama uç noktasına gönderin:
# Submit the GeeTest solution with the form data
verify_response = requests.post("https://example.com/api/login", data={
"username": "user@example.com",
"password": "password123",
"geetest_challenge": solution["geetest_challenge"],
"geetest_validate": solution["geetest_validate"],
"geetest_seccode": solution["geetest_seccode"]
})
print(f"Login status: {verify_response.status_code}")
Python örneğini tamamlayın
import requests
import time
API_KEY = "YOUR_API_KEY"
SITE_URL = "https://staging.example.com/qa-login"
# 1. Get GeeTest parameters from the site
params = requests.get("https://example.com/api/captcha/register").json()
# 2. Submit to CaptchaAI
submit = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "geetest",
"gt": params["gt"],
"challenge": params["challenge"],
"pageurl": SITE_URL,
"json": 1
}).json()
task_id = submit["request"]
# 3. Poll for solution
for _ in range(30):
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:
solution = result["request"]
break
# 4. Submit to site
login = requests.post(SITE_URL, data={
"username": "user@example.com",
"password": "pass",
"geetest_challenge": solution["geetest_challenge"],
"geetest_validate": solution["geetest_validate"],
"geetest_seccode": solution["geetest_seccode"]
})
print(f"Result: {login.status_code}")
Sorun giderme
| Hata | Sebep | Düzeltme |
|---|---|---|
ERROR_BAD_PARAMETERS |
Eksik GT veya Challenge | Her ikisi de gereklidir — sayfadan alıntı |
ERROR_CAPTCHA_UNSOLVABLE |
Yarışmanın süresi doldu veya geçersiz | Siteden yeni bir meydan okumayı yeniden getirin |
| Çözüm site tarafından reddedildi | Eski meydan okuma değeri | Buradaki zorluk tek kullanımlıktır; her denemede yeni bir tane al |
geetest_validate boş |
Dahili olarak çözme başarısız oldu | Yeni bir meydan okumayla yeniden deneyin |
Tam çalıştırılabilir örnek
Ortam kurulumu, yoklama, yeniden denemeler ve hata işleme ile eksiksiz bir çalışma projesine mi ihtiyacınız var?
GitHub →'deki çalıştırılabilir örneğin tamamına bakın
SSS
Neden her seferinde yeni bir meydan okuma getirmem gerekiyor?
challenge değeri tek kullanımlıktır. Bir kez tüketildiğinde (başarılı bir çözüm veya sürenin dolması nedeniyle), sitenin arka ucu onu reddedecektir. Her çözümden önce daima yeni bir meydan okuma getirin.
api_server parametresi nedir?
Doğrulamayı hangi GeeTest sunucusunun gerçekleştireceğini belirtir. Ortak değerler api.geetest.com ve api-na.geetest.com'dir. Site özel bir sunucu kullanıyorsa bunu isteğinize ekleyin.
GeeTest çözümü ne kadar sürer?
Tipik olarak 15–30 saniye. Slayt bulmacaları ve simge zorlukları benzer süreler alır.
GeeTest v4'yi bu yöntemle çözebilir miyim?
Hayır. GeeTest v4 farklı bir protokol kullanır. CaptchaAI'nin sitedeki belirli GeeTest sürümünü destekleyip desteklemediğini kontrol edin.
GeeTest slayt ve tıklama zorlukları arasındaki fark nedir?
GeeTest v3'nin birden fazla zorluk türü vardır (slayt, simge tıklaması, kelime eşleşmesi), ancak API parametreleri ve akışı aynıdır. CaptchaAI tüm v3 türlerini şeffaf bir şekilde işler.