Eğitimler

GeeTest v3 Slider Parametre Çıkarma ve Çözme

GeeTest v3 kaydırıcı CAPTCHA'larının çözülmesi iki parametre gerektirir: gt (statik bir site tanımlayıcısı) ve challenge (dinamik bir oturum belirteci). Bu kılavuz, her ikisinin de herhangi bir sayfadan nasıl çıkarılacağını ve bunların CaptchaAI'ye nasıl gönderileceğini gösterir.


GeeTest v3 parametreleri açıklandı

Parametre Açıklama Statik/Dynamic Örnek
gt Site tanımlayıcı (32 karakterlik onaltılık) Site başına statik 019924a82c70bb123aae90d483b6a0ed
challenge Oturum jetonu (32 karakterlik onaltılık) Sayfa yükleme başına dinamik a3f5c8d2e1b04a6789012345678abcdf
api_server GeeTest API alt alanı (isteğe bağlı) Site başına statik api-na.geetest.com

gt değeri istekler arasında aynı kalır. challenge değeri, CAPTCHA her yüklendiğinde değişir; her çözme girişiminde yeni bir tane çıkarmanız gerekir.


Yöntem 1: Register API çağrısını kesme

Çoğu GeeTest v3 uygulaması, sorunu bir kayıt uç noktasından getirir. Yanıt şuna benzer:

{
  "success": 1,
  "challenge": "a3f5c8d2e1b04a6789012345678abcdf",
  "gt": "019924a82c70bb123aae90d483b6a0ed",
  "new_captcha": true
}

Python (istekler)

import requests
import re

session = requests.Session()
html = session.get("https://staging.example.com/qa-login").text

# Find the register endpoint
register_url = re.search(
    r'(https?://[^"\']+(?:register|captcha|geetest)[^"\']*)',
    html
)

if register_url:
    resp = session.get(register_url.group(1)).json()
    gt = resp["gt"]
    challenge = resp["challenge"]
    print(f"gt: {gt}")
    print(f"challenge: {challenge}")

JavaScript (Puppeteer ağ müdahalesi)

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();

let geetestParams = {};

page.on('response', async (response) => {
  const url = response.url();
  if (url.includes('register') || url.includes('captcha')) {
    try {
      const json = await response.json();
      if (json.gt && json.challenge) {
        geetestParams = {
          gt: json.gt,
          challenge: json.challenge,
        };
        console.log('Captured GeeTest params:', geetestParams);
      }
    } catch (e) {}
  }
});

await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });
console.log('Final params:', geetestParams);

Yöntem 2: Sayfa kaynağından ayıklama

Bazı siteler parametreleri doğrudan HTML'ye veya satır içi komut dosyalarına yerleştirir:

import re

# From data attributes
gt_match = re.search(r'data-gt=["\']([a-f0-9]{32})', html)
challenge_match = re.search(r'data-challenge=["\']([a-f0-9]{32})', html)

# From JavaScript variables
if not gt_match:
    gt_match = re.search(r'gt\s*[=:]\s*["\']([a-f0-9]{32})', html)
if not challenge_match:
    challenge_match = re.search(r'challenge\s*[=:]\s*["\']([a-f0-9]{32})', html)

gt = gt_match.group(1) if gt_match else None
challenge = challenge_match.group(1) if challenge_match else None
print(f"gt={gt}, challenge={challenge}")

Yöntem 3: initGeetest'i kancalayın

GeeTest v3, initGeetest() aracılığıyla başlatılır. Sayfa komut dosyaları çalıştırılmadan önce onu durdurun:

// Puppeteer: inject before page scripts
await page.evaluateOnNewDocument(() => {
  window.__geetestConfig = null;
  const origInit = window.initGeetest;

  Object.defineProperty(window, 'initGeetest', {
    set(fn) {
      this._initGeetest = function(config, callback) {
        window.__geetestConfig = config;
        console.log('GeeTest config:', JSON.stringify(config));
        return fn(config, callback);
      };
    },
    get() { return this._initGeetest; }
  });
});

await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });

const config = await page.evaluate(() => window.__geetestConfig);
// config = { gt: "019924a...", challenge: "a3f5c8d...", product: "bind", ... }

GeeTest v3'yi CaptchaAI ile çözme

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "geetest",
    "gt": gt,
    "challenge": challenge,
    "pageurl": "https://staging.example.com/qa-login",
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]

# Poll
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["status"] == 1:
        solution = result["request"]
        print(f"Solution: {solution}")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

JavaScript

const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: 'YOUR_API_KEY',
    method: 'geetest',
    gt: geetestParams.gt,
    challenge: geetestParams.challenge,
    pageurl: 'https://staging.example.com/qa-login',
    json: 1,
  }
});
const taskId = submit.data.request;

let solution = null;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    solution = poll.data.request;
    break;
  }
}
console.log('Solution:', solution);

GeeTest çözümünün enjekte edilmesi

GeeTest v3'ye yönelik CaptchaAI yanıtı challenge, validate ve seccode'yi içerir:

# solution is a pipe-delimited string or JSON object
# Parse and inject into the form
import json

sol = json.loads(solution) if isinstance(solution, str) else solution

driver.execute_script("""
    const form = document.querySelector('form');
    function addHidden(name, value) {
        let input = form.querySelector(`input[name="${name}"]`);
        if (!input) {
            input = document.createElement('input');
            input.type = 'hidden';
            input.name = name;
            form.appendChild(input);
        }
        input.value = value;
    }
    addHidden('geetest_challenge', arguments[0]);
    addHidden('geetest_validate', arguments[1]);
    addHidden('geetest_seccode', arguments[2]);
""", sol["challenge"], sol["validate"], sol["seccode"])

Sorun giderme

Sorun Sebep Düzeltme
ERROR_BAD_PARAMETERS gt veya challenge eksik Her ikisi de gereklidir; yeni değerler çıkar
Bayat meydan okuma Mücadele jetonunun süresi doldu Yeni bir meydan okumayı göndermeden hemen önce çıkarın
Yanlış gt değeri Farklı siteden kopyaladım gt sahaya özeldir; hedeften yeniden çıkar
Çözüm site tarafından reddedildi Çözüm sırasında meydan okumanın süresi doldu Çıkarma ve gönderme arasındaki süreyi azaltın

SSS

GeeTest mücadelesi ne kadar süreyle geçerlidir?

Tipik olarak 60-120 saniye. Mücadeleyi çıkarın ve hemen CaptchaAI'ye gönderin.

GeeTest v3 ve v4 arasındaki fark nedir?

GeeTest v3, gt/challenge parametrelerini ve bir kaydırıcıyı kullanır. GeeTest v4, captcha_id'yi kullanır ve birden fazla zorluk türüne sahiptir (tıklama, eşleştirme, kaydırma).


GeeTest v3 CAPTCHA'larını CaptchaAI ile çözün

API anahtarınızı şu adresten alın:captchaai.com.


İlgili kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.