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 cũ.
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 cũ
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 | Có | Khóa API CaptchaAI của bạn |
method |
chuỗi | Có | Phải là geetest |
gt |
chuỗi | Có | Khóa trang web công cộng tĩnh |
challenge |
chuỗi | Có | Khóa thử thách động (phải mới) |
pageurl |
chuỗi | Có | URL toàn trang |
Khắc phục: Kiểm tra xem gt, challenge và pageurl đề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 gt và pageurl đú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ự:
- Thử thách mới mẻ —
challengecó được lấy ngay trước khi gửi không? - Ánh xạ trường —
geetest_challenge,geetest_validatevàgeetest_seccodecó được ánh xạ chính xác tới các trường dự kiến của trang đích không? - 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:
- 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.
- Xác minh các thông số —
gt,challenge,pageurlđều phải chính xác. - Kiểm tra ánh xạ trường —
challenge,validatevàseccodeđược trả về phải đi vào các trường bên phải. - 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
- Giải quyết Geetest V3 Nodejs
- Giải mã Geetest V3 Nodejs Captchaai
- Các lỗi Captcha hình ảnh lưới phổ biến và cách sửa