Khắc Phục Sự Cố

Các lỗi và cách khắc phục thường gặp của GeeTest v3

Hầu hết các lỗi GeeTest v3 thuộc một trong ba nhóm: lỗi ở giai đoạn yêu cầu (gửi tới API), lỗi ở giai đoạn kết quả (thăm dò câu trả lời) và lỗi xác thực trang đích (API trả về các giá trị nhưng trang vẫn từ chối chúng). Vấn đề lớn nhất liên quan đến GeeTest hầu như luôn giống nhau: giá trị challenge.

CaptchaAI củaTài liệu API GeeTest v3rõ ràng: bạn phải nhận giá trị challenge mới cho mỗi yêu cầu giải quyết. Khi hình ảnh xác thực được tải trên trang, thử thách cũ sẽ không còn hiệu lực. Điều đó có nghĩa là quá trình tích hợp GeeTest có thể không thành công ngay cả khi yêu cầu gần như chính xác.

Hướng dẫn này sẽ trình bày từng kiểu lỗi phổ biến và cách khắc phục nhanh nhất cho từng kiểu lỗi.


Thất bại số 1 của GeeTest: challenge

Nếu có một điều cần kiểm tra đầu tiên thì đó là thử thách sự mới mẻ.

GeeTest v3 yêu cầu hai tham số chính:

  • gt — khóa trang web công cộng (tĩnh, không thay đổi)
  • challenge — khóa thử thách động (thay đổi mỗi lần tải trang)

Tại sao nó bị hỏng

Giá trị challenge được tạo khi tiện ích GeeTest khởi chạy trên trang. Nếu bạn nắm bắt nó một lần và sử dụng lại nó cho nhiều yêu cầu giải quyết, mọi yêu cầu sau yêu cầu đầu tiên sẽ:

  • bị API từ chối tại thời điểm gửi hoặc
  • tạo ra kết quả mà trang mục tiêu từ chối vì thử thách đã hết hạn

Làm thế nào để sửa nó

Trước mỗi yêu cầu giải quyết, hãy kiểm tra các yêu cầu mạng của trang để tìm lệnh gọi API trả về challenge mới. Phát lại yêu cầu đó để nhận giá trị mới, sau đó gửi ngay tới CaptchaAI.

# Pseudocode: fetch a fresh challenge before each solve
import requests

def get_fresh_challenge(target_url):
    """Hit the GeeTest init endpoint to get a new challenge."""
    resp = requests.get(f"{target_url}/geetest/register", timeout=10)
    data = resp.json()
    return data["challenge"], data["gt"]

challenge, gt = get_fresh_challenge("https://example.com")
# Now submit to CaptchaAI immediately — do not delay

Quy tắc chung: Nếu thời gian từ khi chụp challenge đến khi gửi yêu cầu giải quyết lâu hơn vài giây, hãy làm mới yêu cầu đó.


Lỗi ở giai đoạn yêu cầu

Những lỗi này xảy ra khi bạn gửi tác vụ tới https://ocr.captchaai.com/in.php.

ERROR_WRONG_USER_KEY

Lý do: Định dạng khóa API không chính xác (phải có 32 ký tự).

Khắc phục: Xác minh khóa từcaptchaai.com/api.php. Không thêm ký tự thừa hoặc khoảng trắng.

ERROR_KEY_DOES_NOT_EXIST

Lý do: Khóa API được định dạng chính xác nhưng không khớp với bất kỳ tài khoản đang hoạt động nào.

Khắc phục: Đăng nhập vào bảng điều khiển CaptchaAI của bạn và xác nhận khóa của bạn đang hoạt động.

ERROR_ZERO_BALANCE

Lý do: Không có chủ đề miễn phí nào trong gói hiện tại của bạn.

Khắc phục: Đợi các luồng giải phóng, giảm đồng thời hoặc nâng cấp gói của bạn.

ERROR_PAGEURL

Lý do: Tham số pageurl bị thiếu trong yêu cầu.

Khắc phục: Thêm URL đầy đủ của trang nơi tải tiện ích GeeTest. Ví dụ:

pageurl=https://staging.example.com/qa-login

ERROR_BAD_PARAMETERS

Lý do: Một hoặc nhiều trường bắt buộc bị thiếu hoặc không đúng định dạng. Đối với GeeTest, các tham số bắt buộc là:

tham số loại Bắt buộc Mô tả
key chuỗi Khóa API CaptchaAI của bạn
method chuỗi Phải là geetest
gt chuỗi Khóa trang web công cộng tĩnh
challenge chuỗi Khóa thử thách động (phải mới)
pageurl chuỗi URL toàn trang

Khắc phục: Kiểm tra xem gt, challengepageurl đều có mặt và được định dạng chính xác hay không.

Phản hồi HTML hoặc 500/502

Nguyên nhân: Lỗi tạm thời phía máy chủ — không phải vấn đề về tham số.

Khắc phục: Đợi 5–10 giây và thử lại yêu cầu.


Lỗi ở giai đoạn kết quả

Những lỗi này xảy ra khi bạn thăm dò https://ocr.captchaai.com/res.php.

CAPCHA_NOT_READY

Đây không phải là lỗi. Điều đó có nghĩa là hình ảnh xác thực vẫn đang được giải quyết. Giải GeeTest v3 ở CaptchaAI thường mất dưới 12 giây với tỷ lệ thành công 100%.

Khắc phục: Đợi 5 giây và thăm dò lại. Đừng coi đây là một thất bại.

ERROR_WRONG_ID_FORMAT

Lý do: Định dạng ID captcha sai — ID chỉ được là số.

Khắc phục: Xác minh rằng bạn đang sử dụng ID chính xác được in.php trả về mà không sửa đổi.

ERROR_WRONG_CAPTCHA_ID

Lý do: ID không khớp với bất kỳ tác vụ nào đã gửi.

Khắc phục: Kiểm tra xem bạn có đang sử dụng đúng ID từ phản hồi gửi hay không. Nếu bạn đã gửi nhiều nhiệm vụ, hãy đảm bảo rằng bạn đang bỏ phiếu đúng nhiệm vụ.

ERROR_EMPTY_ACTION

Lý do: Tham số action bị thiếu hoặc trống trong yêu cầu thăm dò ý kiến của bạn.

Khắc phục: Đưa action=get vào mọi yêu cầu thăm dò ý kiến:

https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID

ERROR_CAPTCHA_UNSOLVABLE

Lý do: Không thể giải quyết thử thách — có thể do giá trị challenge cũ hoặc biến thể GeeTest không được hỗ trợ.

Khắc phục: Làm mới giá trị challenge và thử lại.

ERROR_INTERNAL_SERVER_ERROR

Nguyên nhân: Sự cố phía máy chủ tại CaptchaAI.

Khắc phục: Đợi 10 giây và thử lại.


Lỗi xác thực trang đích

Đây là những lỗi khó gỡ lỗi nhất vì API CaptchaAI trả về kết quả hợp lệ nhưng trang đích vẫn từ chối kết quả đó.

Khi giải GeeTest v3 thành công, API sẽ trả về ba giá trị:

{
  "challenge": "1a2b3456cd67890e12345fab678901c2de",
  "validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
  "seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}

Chúng phải được gửi đến trang mục tiêu dưới dạng:

Trường phản hồi API Trường trang mục tiêu
challenge geetest_challenge
validate geetest_validate
seccode geetest_seccode

Lỗi 1: Ánh xạ trường sai

Triệu chứng: API trả về các giá trị nhưng trang đích từ chối chúng ngay lập tức.

Nguyên nhân: Các giá trị trả về được chèn vào sai trường hoặc đường dẫn yêu cầu sai.

Khắc phục: Kiểm tra lưu lượng truy cập mạng từ giải pháp GeeTest thủ công trên trang mục tiêu. Tìm yêu cầu POST gửi kết quả GeeTest và khớp chính xác với tên trường của bạn.

Lỗi 2: challenge cũ được sử dụng ngược dòng

Triệu chứng: API trả về các giá trị nhưng trang cho biết thử thách đã hết hạn hoặc không hợp lệ.

Lý do: Giá trị challenge được ghi lại quá sớm hoặc được sử dụng lại.

Khắc phục: Tìm nạp challenge mới ngay trước mỗi yêu cầu giải quyết. Không lưu trữ hoặc sử dụng lại nó.

Lỗi 3: Ngữ cảnh trang sai

Triệu chứng: Quá trình xác thực không thành công ngay cả với thông tin đầu vào mới.

Lý do: pageurl được gửi tới CaptchaAI không khớp với trang thực tế nơi tiện ích GeeTest đã được tải.

Khắc phục: Sử dụng URL chính xác, bao gồm giao thức và đường dẫn. Nếu tiện ích được tải qua AJAX trên một tuyến đường khác, hãy sử dụng URL của tuyến đường đó.

Thất bại 4: Cấu trúc yêu cầu không khớp

Triệu chứng: Các trường đúng nhưng định dạng yêu cầu sai.

Lý do: Trang đích yêu cầu các trường GeeTest ở một loại nội dung cụ thể (ví dụ: nội dung JSON so với mã hóa biểu mẫu) hoặc cùng với các trường biểu mẫu khác.

Khắc phục: So sánh yêu cầu gửi của bạn với lưu lượng truy cập mạng từ giải pháp thủ công. Khớp loại nội dung, thứ tự trường và bất kỳ trường bổ sung nào.


Tham khảo sửa lỗi nhanh

Lỗi/Triệu chứng sân khấu Có khả năng gây ra sửa chữa
ERROR_WRONG_USER_KEY Gửi Khóa API không đúng định dạng Xác minh khóa 32 ký tự
ERROR_KEY_DOES_NOT_EXIST Gửi Khóa không hợp lệ Kiểm tra trang tổng quan
ERROR_ZERO_BALANCE Gửi Không có chủ đề miễn phí Chờ hoặc nâng cấp gói
ERROR_PAGEURL Gửi Thiếu pageurl Thêm URL trang đầy đủ
ERROR_BAD_PARAMETERS Gửi Thiếu gt, challenge hoặc pageurl Xác minh tất cả các trường bắt buộc
CAPCHA_NOT_READY Thăm dò ý kiến Đang giải quyết Đợi 5 giây, thử lại
ERROR_WRONG_ID_FORMAT Thăm dò ý kiến ID hình ảnh xác thực không phải số Sử dụng ID chính xác từ in.php
ERROR_WRONG_CAPTCHA_ID Thăm dò ý kiến ID hình ảnh xác thực không hợp lệ Xác minh ID gửi
ERROR_EMPTY_ACTION Thăm dò ý kiến Thiếu action=get Thêm tham số hành động
ERROR_CAPTCHA_UNSOLVABLE Thăm dò ý kiến Thử thách cũ hoặc biến thể không được hỗ trợ Làm mới thử thách, thử lại
API trả về giá trị nhưng trang từ chối Xác thực Thử thách cũ, trường sai, URL sai Làm mới thử thách, xác minh ánh xạ trường

Python: hoàn thành bài toán GeeTest v3 với thử thách mới

import time
import requests

API_KEY = "YOUR_CAPTCHAAI_API_KEY"

SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"

def get_fresh_challenge(target_url):
    """Fetch a fresh GeeTest challenge from the target page."""
    resp = requests.get(f"{target_url}/api/geetest/register", timeout=10)
    data = resp.json()
    return data["gt"], data["challenge"]

def solve_geetest_v3(api_key, gt, challenge, pageurl):
    """Submit a GeeTest v3 challenge and return the validation package."""

    # Submit
    submit_resp = requests.post(
        SUBMIT_URL,
        data={
            "key": api_key,
            "method": "geetest",
            "gt": gt,
            "challenge": challenge,
            "pageurl": pageurl,
            "json": 1,
        },
        timeout=30,
    )
    submit_resp.raise_for_status()
    submit_data = submit_resp.json()

    if submit_data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {submit_data}")

    captcha_id = submit_data["request"]
    print(f"Task created — captcha ID: {captcha_id}")

    # Wait before first poll
    time.sleep(15)

    # Poll for result
    for _ in range(60):
        result_resp = requests.get(
            RESULT_URL,
            params={
                "key": api_key,
                "action": "get",
                "id": captcha_id,
                "json": 1,
            },
            timeout=30,
        )
        result_resp.raise_for_status()
        result_data = result_resp.json()

        if result_data.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue

        if result_data.get("status") == 1:
            return result_data["request"]

        raise RuntimeError(f"Polling error: {result_data}")

    raise TimeoutError("GeeTest v3 solve timed out")

# Usage: always fetch a fresh challenge first
PAGE_URL = "https://staging.example.com/qa-login"
gt, challenge = get_fresh_challenge(PAGE_URL)
result = solve_geetest_v3(API_KEY, gt, challenge, PAGE_URL)
print(f"Result: {result}")

# The result contains: challenge, validate, seccode
# Map them to: geetest_challenge, geetest_validate, geetest_seccode

Node.js: hoàn thành bài giải GeeTest v3 với thử thách mới

const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function getFreshChallenge(targetUrl) {
  const resp = await fetch(`${targetUrl}/api/geetest/register`);
  const data = await resp.json();
  return { gt: data.gt, challenge: data.challenge };
}

async function solveGeetestV3(apiKey, gt, challenge, pageurl) {
  // Submit
  const submitResp = await fetch(SUBMIT_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: new URLSearchParams({
      key: apiKey,
      method: "geetest",
      gt: gt,
      challenge: challenge,
      pageurl: pageurl,
      json: "1",
    }),
  });

  const submitData = await submitResp.json();
  if (submitData.status !== 1) {
    throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
  }

  const captchaId = submitData.request;
  console.log(`Task created — captcha ID: ${captchaId}`);

  await sleep(15_000);

  // Poll for result
  for (let i = 0; i < 60; i++) {
    const resultResp = await fetch(
      `${RESULT_URL}?${new URLSearchParams({
        key: apiKey,
        action: "get",
        id: captchaId,
        json: "1",
      })}`
    );

    const resultData = await resultResp.json();

    if (resultData.request === "CAPCHA_NOT_READY") {
      await sleep(5_000);
      continue;
    }

    if (resultData.status === 1) {
      return resultData.request;
    }

    throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
  }

  throw new Error("GeeTest v3 solve timed out");
}

// Usage
const PAGE_URL = "https://staging.example.com/qa-login";

(async () => {
  const { gt, challenge } = await getFreshChallenge(PAGE_URL);
  const result = await solveGeetestV3(API_KEY, gt, challenge, PAGE_URL);
  console.log("Result:", result);
  // Map result fields to: geetest_challenge, geetest_validate, geetest_seccode
})();

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

Tại sao GeeTest liên tục thất bại ngay cả khi yêu cầu có vẻ đúng?

Nguyên nhân phổ biến nhất là giá trị challenge cũ. Ngay cả khi gtpageurl đúng, thử thách đã hết hạn sẽ khiến API không thành công hoặc trang đích từ chối các giá trị được trả về. Luôn tìm một thử thách mới ngay trước mỗi yêu cầu giải quyết.

Lỗi GeeTest v3 phổ biến nhất là gì?

Sử dụng lại giá trị challenge không còn mới. Tài liệu CaptchaAI cảnh báo rõ ràng rằng khi hình ảnh xác thực tải trên trang, thử thách cũ sẽ không hợp lệ.

CAPCHA_NOT_READY có nghĩa là gì?

Điều đó có nghĩa là quá trình giải vẫn đang được tiến hành - không phải lỗi. Đợi 5 giây và thăm dò lại res.php. Giải GeeTest v3 ở CaptchaAI thường mất dưới 12 giây.

Tôi nên làm gì nếu API trả về giá trị nhưng trang vẫn từ chối chúng?

Kiểm tra ba điều theo thứ tự:

  1. Thử thách mới mẻchallenge có được lấy ngay trước khi gửi không?
  2. Ánh xạ trườnggeetest_challenge, geetest_validategeetest_seccode có được ánh xạ chính xác tới các trường dự kiến của trang đích không?
  3. Cấu trúc yêu cầu — Trang đích có yêu cầu JSON, dữ liệu được mã hóa biểu mẫu hay định dạng khác không? So sánh với lưu lượng truy cập mạng của giải pháp thủ công.

GeeTest v3 khác với reCAPTCHA v2 như thế nào?

GeeTest v3 là một thử thách puzzle/slider (không phải hộp kiểm). Nó yêu cầu một tham số challenge động phải được làm mới cho mỗi lần giải. API trả về ba trường xác thực (challenge, validate, seccode) thay vì một mã thông báo. Để giải quyết reCAPTCHA v2, hãy xemCách giải reCAPTCHA v2 bằng API.

CaptchaAI có hỗ trợ GeeTest v4 không?

Bài viết này chỉ đề cập đến GeeTest v3. Kiểm traTài liệu API CaptchaAIđể biết các loại hình ảnh xác thực được hỗ trợ mới nhất.


Sửa quy trình làm việc GeeTest của bạn

Nếu quá trình tích hợp GeeTest của bạn không thành công:

  1. Kiểm tra thử thách — Nó có mới không? Lấy một cái mới ngay trước mỗi lần giải.
  2. Xác minh các thông sốgt, challenge, pageurl đều phải chính xác.
  3. Kiểm tra ánh xạ trườngchallenge, validateseccode được trả về phải đi vào các trường bên phải.
  4. So sánh với cách giải thủ công — Sử dụng DevTools của trình duyệt để nắm bắt cấu trúc yêu cầu chính xác từ cách giải thủ công GeeTest thành công.

Bắt đầu vớiBộ giải CaptchaAI GeeTest v3, xác nhận các thông số của bạn dựa vàotài liệu API, và đọcCaptcha GeeTest v3 hoạt động như thế nàonếu bạn cần thông tin cơ bản về quy trình thử thách.


Nhật ký lặp lại

Lặp lại Tập trung Thay đổi
Dự thảo 1 Cấu trúc và nội dung Bản thảo khắc phục sự cố ban đầu - 3 giai đoạn lỗi, bảng lỗi cần sửa, Câu hỏi thường gặp
Dự thảo 2 Độ chính xác kỹ thuật Đã xác minh tất cả các mã lỗi và tham số GeeTest dựa trên captchaai.com/api-docs. Đã thêm bảng tham số API. Đã xác nhận ánh xạ trường challenge/validate/seccode.
Dự thảo 3 Ví dụ về mã Đã thêm các ví dụ Python và Node.js hoàn chỉnh với tính năng tìm nạp thử thách mới. Đã thêm mã giả cho mẫu làm mới thử thách.
Dự thảo 4 Độ sâu lỗi xác thực Phần xác thực trang đích được mở rộng với 4 chế độ lỗi riêng biệt. Đã thêm bảng ánh xạ trường. Đã thêm chẩn đoán không khớp cấu trúc yêu cầu.
Dự thảo 5 Đánh bóng QA cuối cùng Đã xác minh tất cả các mã lỗi đều khớp với tài liệu chính thức. Đã thêm bảng tham khảo nhanh. Phần giới thiệu thắt chặt. Đã thêm liên kết chéo vào các bài viết cụm. Các câu trả lời Câu hỏi thường gặp đã được xác nhận đã sẵn sàng cho lược đồ.

Tóm tắt tài sản trực quan

Hình ảnh anh hùng

  • Văn bản thay thế: Khắc phục sự cố của nhà phát triển lỗi GeeTest v3 — chẩn đoán lỗi yêu cầu, bỏ phiếu và xác thực
  • Phải hiển thị: Ngữ cảnh gỡ lỗi với các giai đoạn của luồng lỗi và điểm lỗi
  • Tên tệp: geetest-v3-errors-troubleshooting-hero.png

Hình ảnh trong bài viết 1

  • Vị trí: Sau "Lỗi ở giai đoạn kết quả"
  • Loại: Cây quyết định
  • Văn bản thay thế: Cây quyết định cho các lỗi GeeTest v3 — lỗi yêu cầu, lỗi bỏ phiếu và lỗi xác thực
  • Tên tệp: geetest-v3-error-decision-tree.png

Hình ảnh trong bài viết 2

  • Vị trí: Sau "Lỗi xác thực trang đích"
  • Loại: Sơ đồ nguyên nhân và cách khắc phục
  • Văn bản thay thế: Sơ đồ hiển thị các nguyên nhân phổ biến khiến trang GeeTest v3 bị từ chối và các cách khắc phục
  • Tên tệp: geetest-v3-validation-nguyên nhân-fixes.png

bài viết liên quan

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