Hướng Dẫn API

Cách giải quyết GeeTest v3 bằng API

GeeTest v3 đưa ra các thử thách tương tác — câu đố trượt, lựa chọn biểu tượng hoặc ghép từ. Không giống như reCAPTCHA, GeeTest sử dụng luồng xác minh tùy chỉnh với ba tham số (gt, challenge, api_server) mà bạn phải trích xuất từ ​​trang trước khi giải.

Hướng dẫn này hướng dẫn toàn bộ quy trình trích xuất các tham số GeeTest và giải quyết thử thách bằng API CaptchaAI.


Yêu cầu

Mục Giá trị
Khóa API CaptchaAI Từcaptchaai.com
Giá trị GeeTest gt Mã định danh tĩnh trên mỗi trang web
GeeTest challenge Giá trị động mỗi phiên
URL trang URL nơi GeeTest xuất hiện
Ngôn ngữ Python 3.7+ hoặc Node.js 14+

Bước 1: Trích xuất thông số GeeTest

GeeTest yêu cầu ba tham số. gt là tĩnh (giống nhau cho mọi yêu cầu), trong khi challenge thay đổi mỗi phiên.

Cách 1: Tab mạng

  1. Mở tab DevTools → Mạng
  2. Lọc theo register-slide hoặc gettype.php hoặc get.php
  3. Kích hoạt hình ảnh xác thực và tìm yêu cầu khởi tạo
  4. Phản hồi chứa gt, challenge và đôi khi api_server
{
  "success": 1,
  "gt": "019924a82c70bb123aae90d483087f94",
  "challenge": "12345678abc90def12345678abc90def",
  "new_captcha": true
}

Cách 2: Nguồn trang

// Search page source for initGeetest or gt value
document.querySelectorAll('script').forEach(s => {
  if (s.textContent.includes('initGeetest')) {
    console.log(s.textContent);
  }
});

Phương pháp 3: Điểm cuối API

Nhiều trang web tìm nạp các tham số GeeTest từ API của riêng họ:

# 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"]

Bước 2: Gửi nhiệm vụ tới CaptchaAI

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;
}

Bước 3: Thăm dò ý kiến giải pháp

Việc giải GeeTest trả về ba giá trị: challenge, validateseccode.

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');
}

Bước 4: Gửi giải pháp đến trang đích

Gửi cả ba giá trị đến điểm cuối xác minh của trang web:

# 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}")

Ví dụ Python hoàn chỉnh

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}")

Khắc phục sự cố

Lỗi nguyên nhân sửa chữa
ERROR_BAD_PARAMETERS Thiếu gt hoặc thử thách Cả hai đều được yêu cầu - trích xuất từ trang
ERROR_CAPTCHA_UNSOLVABLE Thử thách đã hết hạn hoặc không hợp lệ Tìm nạp lại một thử thách mới từ trang web
Giải pháp bị từ chối bởi trang web Giá trị thử thách cũ Thách thức là sử dụng một lần; nhận một cái mới cho mỗi lần thử
geetest_validate trống Giải quyết thất bại nội bộ Thử lại với một thử thách mới

Ví dụ đầy đủ có thể chạy được

Bạn cần một dự án hoạt động hoàn chỉnh với thiết lập môi trường, bỏ phiếu, thử lại và xử lý lỗi?

Xem ví dụ có thể chạy đầy đủ trên GitHub →


Câu hỏi thường gặp

Tại sao tôi cần tìm một thử thách mới mỗi lần?

Giá trị challenge là giá trị sử dụng một lần. Sau khi nó được sử dụng (dù là do giải quyết thành công hay hết hạn), phần phụ trợ của trang web sẽ từ chối nó. Luôn tìm ra một thử thách mới trước mỗi lần giải.

Tham số api_server là gì?

Nó chỉ định máy chủ GeeTest nào xử lý việc xác minh. Các giá trị phổ biến là api.geetest.comapi-na.geetest.com. Nếu trang web sử dụng máy chủ tùy chỉnh, hãy đưa nó vào yêu cầu của bạn.

Việc giải GeeTest mất bao lâu?

Thông thường là 15–30 giây. Câu đố trượt và thử thách biểu tượng mất thời gian tương tự.

Tôi có thể giải GeeTest v4 bằng phương pháp này không?

Không. GeeTest v4 sử dụng một giao thức khác. Kiểm tra xem CaptchaAI có hỗ trợ phiên bản GeeTest cụ thể trên trang web hay không.

Sự khác biệt giữa thử thách trượt và nhấp chuột GeeTest là gì?

GeeTest v3 có nhiều loại thử thách (trượt, nhấp vào biểu tượng, khớp từ), nhưng các tham số và quy trình API giống hệt nhau. CaptchaAI xử lý tất cả các loại v3 một cách minh bạch.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.