Reshenie GeeTest cherez API za sekundy
Reshenie GeeTest programmnym putem svoditsya k odnomu stsenariyu: vy peredaete parametry kapchi v API, servis progonyaet ih cherez AI-model i vozvraschaet gotovyy token, kotoryy vy otpravlyaete na sayt vmeste s formoy. V etoy state razberem, chto takoe GeeTest, chem otlichayutsya versii v3 i v4, kakie byvayut varianty (slayder, icon, gobang i drugie) i pokazhem polnye primery koda na Python i Node.js pod API OMOCaptcha.
Chto takoe GeeTest
GeeTest eto povedencheskaya CAPTCHA kitayskoy razrabotki, shiroko ispolzuemaya na aziatskih i globalnyh saytah. V otlichie ot prostoy kartinki s tekstom, GeeTest analiziruet povedenie polzovatelya: traektoriyu myshi, skorost, mikro-zaderzhki. Imenno poetomu naivnye skripty na ney spotykayutsya, a korrektnoe raspoznavanie GeeTest trebuet emulyatsii chelovecheskogo vzaimodeystviya chto i beret na sebya AI-servis.
Suschestvuyut dve osnovnye versii protokola:
- GeeTest v3 identifitsiruetsya paroy parametrov gt (publichnyy klyuch) i challenge (odnorazovyy token sessii). V otvete vy poluchaete troyku challenge, validate, seccode.
- GeeTest v4 ispolzuet edinyy parametr captcha_id. V otvete prihodit nabor poley tokena (captcha_output, gen_time, lot_number, pass_token), kotorye nuzhno peredat pri validatsii.
Varianty GeeTest, kotorye podderzhivaet OMOCaptcha
OMOCaptcha obuchena na raznyh tipah interaktivnyh chellendzhey GeeTest. Vse oni tarifitsiruyutsya po edinoy tsene $0.60 za 1000 resheniy.
Variant - Opisanie
slide / puzzle - klassicheskiy geetest slayder dovesti pazl do vyreza
icon - vybrat ikonki po obraztsu
gobang - nayti liniyu iz odinakovyh elementov
iconcrush - sopostavit/ubrat sovpadayuschie ikonki
select (select-object) - vybrat obekt po tekstovomu zadaniyu
Srednyaya skorost resheniya 0.42 sekundy, tochnost do 99%. Podrobnye tarify po vsem 14 sistemam smotrite na stranitse tsen (https://omocaptcha.com/ru#pricing) i v obzore stoimosti resheniya kapchi cherez API (https://blog.omocaptcha.com/stoimost-resheniya-kapchi-api).
Kak ustroen flow resheniya
Logika odinakova dlya vseh token-kapch v OMOCaptcha i postroena na AntiCaptcha-sovmestimom kontrakte:
1. Schitat parametry GeeTest so stranitsy-tseli (gt + challenge dlya v3 libo captcha_id dlya v4, plyus websiteURL).
2. POST /createTask otpravit zadachu s tipom GeeTest i poluchit taskId.
3. Opros POST /getTaskResult periodicheski sprashivat status, poka on ne stanet ready.
4. Prochitat solution zabrat token (v3: challenge/validate/seccode; v4: polya tokena).
5. Otpravit reshenie na sayt vmeste s vashey formoy.
Vse zaprosy k https://api.omocaptcha.com/v2 vozvraschayut HTTP 200 vsegda; uspeh opredelyaetsya polem errorId (0 = uspeh). Zadacha privyazana k API-klyuchu, kotoryy ee sozdal: chuzhoy klyuch dast ERROR_TASK_KEY_MISMATCH.
Primechanie: tochnoe znachenie polya type (naprimer GeeTestTask / GeeTestV4Task) i polnyy nabod poley zadachi dlya vashego varianta GeeTest utochnite v dokumentatsii OMOCaptcha API (https://omocaptcha.com/ru?utm_source=blog&utm_medium=organic). Nizhe ispolzuetsya tip GeeTestTask kak orientir.
Primer na Python
Gotovyy, samodostatochnyy skript: sozdaet zadachu, vezhlivo oprashivaet rezultat s narastayuschey zaderzhkoy (backoff) i taymautom na kazhdyy HTTP-zapros.
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.omocaptcha.com/v2"
def create_geetest_task():
payload = (
"clientKey": API_KEY,
"task": (
"type": "GeeTestTask", # utochnite tochnyy type v dokumentatsii
"websiteURL": "https://example.com/login",
"gt": "PUBLIC_GT_KEY",
"challenge": "CHALLENGE_TOKEN",
# dlya GeeTest v4 vmesto gt/challenge ispolzuyte:
# "captchaId": "CAPTCHA_ID",
),
)
r = requests.post(f"(BASE_URL)/createTask", json=payload, timeout=30)
r.raise_for_status()
data = r.json()
if data["errorId"] != 0:
raise RuntimeError(f"createTask: (data['errorCode']) (data['errorDescription'])")
return data["taskId"]
def get_task_result(task_id, max_attempts=24):
delay = 3
for _ in range(max_attempts):
r = requests.post(
f"(BASE_URL)/getTaskResult",
json=("clientKey": API_KEY, "taskId": task_id),
timeout=30,
)
r.raise_for_status()
data = r.json()
if data["errorId"] != 0:
raise RuntimeError(f"getTaskResult: (data['errorCode'])")
if data["status"] == "ready":
return data["solution"]
if data["status"] == "fail":
raise RuntimeError("Zadacha zavershilas s oshibkoy")
time.sleep(delay)
delay = min(delay + 2, 10) # backoff
raise TimeoutError("Prevysheno vremya ozhidaniya rezultata")
if __name__ == "__main__":
task_id = create_geetest_task()
solution = get_task_result(task_id)
# GeeTest v3: solution.challenge / solution.validate / solution.seccode
# GeeTest v4: polya tokena, napr. solution.token / captcha_output
print(solution)
Primer na Node.js
Tot zhe stsenariy na chistom Node.js (18+, vstroennyy fetch), s taymautom cherez AbortController i backoff.
const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.omocaptcha.com/v2";
async function post(path, body, timeoutMs = 30000) (
const controller = new AbortController();
const t = setTimeout(() => controller.abort(), timeoutMs);
try (
const res = await fetch(`$(BASE_URL)$(path)`, (
method: "POST",
headers: ( "Content-Type": "application/json" ),
body: JSON.stringify(body),
signal: controller.signal,
));
return await res.json();
) finally (
clearTimeout(t);
)
)
async function createGeeTestTask() (
const data = await post("/createTask", (
clientKey: API_KEY,
task: (
type: "GeeTestTask", // utochnite tochnyy type v dokumentatsii
websiteURL: "https://example.com/login",
gt: "PUBLIC_GT_KEY",
challenge: "CHALLENGE_TOKEN",
// GeeTest v4: captchaId: "CAPTCHA_ID"
),
));
if (data.errorId !== 0) throw new Error(`createTask: $(data.errorCode)`);
return data.taskId;
)
async function getTaskResult(taskId, maxAttempts = 24) (
let delay = 3000;
for (let i = 0; i < maxAttempts; i++) (
const data = await post("/getTaskResult", ( clientKey: API_KEY, taskId ));
if (data.errorId !== 0) throw new Error(`getTaskResult: $(data.errorCode)`);
if (data.status === "ready") return data.solution;
if (data.status === "fail") throw new Error("Zadacha zavershilas s oshibkoy");
await new Promise((r) => setTimeout(r, delay));
delay = Math.min(delay + 2000, 10000); // backoff
)
throw new Error("Prevysheno vremya ozhidaniya rezultata");
)
(async () => (
const taskId = await createGeeTestTask();
const solution = await getTaskResult(taskId);
// v3: solution.challenge / solution.validate / solution.seccode
// v4: polya tokena
console.log(solution);
))();
Posle polucheniya resheniya podstavte polya v formu: dlya v3 geetest_challenge, geetest_validate, geetest_seccode; dlya v4 parametry tokena v tele zaprosa validatsii na storone sayta.
Otvetstvennoe ispolzovanie
Avtomatizatsiya kapch umestna dlya legitimnyh zadach: QA i regressionnoe testirovanie sobstvennyh form, dostupnost, avtorizovannyy ili kontraktnyy sbor dannyh, nagruzochnoe testirovanie i monitoring vashih servisov. Soblyudayte robots.txt, usloviya ispolzovaniya saytov i razumnye limity zaprosov. Ne ispolzuyte reshenie kapch dlya massovoy registratsii feykov, obhoda banov ili moshennichestva. Horoshaya praktika anti-detekta opisana v state pro veb-skreyping bez blokirovok (https://blog.omocaptcha.com/veb-skreyping-bez-blokirovok).
OMOCaptcha rabotaet tolko na AI (bez ocheredi operatorov-lyudey), ispolzuet end-to-end shifrovanie i ne hranit soderzhimoe kapch i logi klientov. Obschie printsipy povedencheskoy zaschity mozhno pochitat v dokumentatsii GeeTest (https://docs.geetest.com/).
FAQ
Chem otlichaetsya reshenie GeeTest v3 ot v4?
v3 rabotaet s paroy gt + challenge i vozvraschaet challenge/validate/seccode. v4 ispolzuet edinyy captcha_id i otdaet token iz neskolkih poley. Tip zadachi i nabor parametrov pod kazhduyu versiyu nuzhno ukazat pri createTask.
Kak oboyti geetest slayder programmno?
Peredayte parametry kapchi (gt, challenge ili captcha_id) v createTask s tipom GeeTest AI sam rasschitaet korrektnuyu traektoriyu i vernet gotovyy token. Ruchnaya emulyatsiya myshi ne trebuetsya.
Skolko stoit raspoznavanie GeeTest?
Vse varianty GeeTest (slide, icon, gobang, iconcrush, select) stoyat $0.60 za 1000 resheniy. Eto na 20-40% deshevle mnogih zarubezhnyh servisov sravnenie est v obzore luchshego servisa raspoznavaniya kapchi (https://blog.omocaptcha.com/luchshiy-servis-raspoznavaniya-kapchi).
Kakoy geozaderzhki zhdat ot geetest api?
Srednyaya skorost resheniya 0.42 sekundy pri tochnosti do 99%. Oprashivayte getTaskResult s intervalom v neskolko sekund i backoff, chtoby ne peregruzhat API.
Podderzhivayutsya li drugie kapchi cherez tot zhe API?
Da. Tot zhe flow createTask + getTaskResult rabotaet dlya 14 sistem, vklyuchaya reCAPTCHA (https://blog.omocaptcha.com/kak-reshit-recaptcha), hCaptcha (https://blog.omocaptcha.com/kak-reshit-hcaptcha) i Cloudflare Turnstile (https://blog.omocaptcha.com/reshenie-cloudflare-turnstile). Perehod s drugogo provaydera opisan v alternative 2Captcha (https://blog.omocaptcha.com/2captcha-alternativa).
Nachnite besplatno
Podklyuchite reshenie GeeTest k svoemu payplaynu za paru minut. Pri registratsii vy poluchaete 1000 besplatnyh resheniy, a esli success rate opustitsya nizhe 95% polnyy vozvrat sredstv.
Sozdayte klyuch na omocaptcha.com (https://omocaptcha.com/ru?utm_source=blog&utm_medium=organic) i pishite na [email protected] podderzhka otvechaet kruglosutochno. |