Troubleshooting

GeeTest v3 Error Codes: Complete Troubleshooting Reference

GeeTest v3 errors can come from three sources: the GeeTest registration API, the GeeTest validation API, or CaptchaAI's solving API. This reference covers all three, helping you identify the source and fix the issue quickly.

Error Source Identification

Source When it occurs Error format
GeeTest Registration When getting gt and challenge HTTP response codes + JSON
GeeTest Validation When site verifies solution JSON success/fail
CaptchaAI Submit When sending task to CaptchaAI ERROR_* strings
CaptchaAI Poll When checking task result ERROR_* or CAPCHA_NOT_READY

GeeTest Registration Errors

These occur when the site's backend requests a challenge from GeeTest:

Error Cause Impact on you
success: 0 (offline mode) GeeTest servers unreachable Site falls back to offline mode — simpler challenge
Empty challenge Registration failed Cannot solve — no challenge token available
gt mismatch Wrong GeeTest ID extracted Solution won't validate
HTTP 429 Rate limited by GeeTest Wait and retry — or the site may cache challenges

Detecting Offline Mode

# Check if GeeTest is in offline mode
registration_data = get_geetest_registration()

if registration_data.get("success") == 0:
    print("GeeTest offline mode — local validation")
    # Offline mode uses different verification
else:
    print("GeeTest online mode — standard flow")

GeeTest Validation Errors

These occur when the site's backend verifies the three solution values:

Error Meaning Cause
Validation returns fail Solution rejected Challenge expired, wrong values, or tampered
Validation returns empty Server error GeeTest server issue
Challenge mismatch geetest_challenge doesn't match expected Wrong challenge token used
Seccode format invalid geetest_seccode missing \|jordan suffix Incomplete solution

Common Validation Failures

Scenario Root cause Fix
Solution was correct but rejected Challenge expired between solve and submit Reduce time between extracting challenge and submitting solution
All three values present but rejected gt or challenge extracted from wrong element Verify you're extracting from the correct GeeTest widget
Works intermittently Race condition with challenge refresh Don't let the page refresh the challenge after extraction
Always fails Wrong GeeTest version (v4 instead of v3) Check GeeTest version and use correct CaptchaAI method

CaptchaAI Submit Errors (GeeTest-Specific)

When submitting a GeeTest task to CaptchaAI:

Error Cause Fix
ERROR_WRONG_CAPTCHA_ID Invalid method parameter Use method=geetest
ERROR_CAPTCHA_UNSOLVABLE Challenge couldn't be solved Challenge may have expired — extract fresh and retry
ERROR_WRONG_USER_KEY Invalid CaptchaAI API key Check your API key
ERROR_ZERO_BALANCE No funds Add balance to CaptchaAI
ERROR_NO_SLOT_AVAILABLE Server capacity reached Retry after 1–5 seconds
ERROR_PAGEURL Missing or invalid page URL Provide the full URL

GeeTest-Specific Parameter Errors

Error Cause Fix
ERROR_BAD_PARAMETERS Missing gt or challenge Both are required for GeeTest
Invalid gt format gt should be 32-char hex Verify extraction — gt is always 32 hex characters
Invalid challenge format challenge should be 32-char hex Extract fresh — challenge changes each page load

CaptchaAI Poll Errors

Error Meaning Action
CAPCHA_NOT_READY Still solving Continue polling every 3–5 seconds
ERROR_CAPTCHA_UNSOLVABLE Failed to solve Submit a new task with fresh challenge
ERROR_WRONG_CAPTCHA_ID Task ID invalid Use the exact ID returned by in.php

Debugging Checklist

When a GeeTest solution fails, check in order:

1. Parameter Extraction

# Verify gt is 32 hex characters
assert len(gt) == 32 and all(c in "0123456789abcdef" for c in gt), f"Invalid gt: {gt}"

# Verify challenge is 32 hex characters
assert len(challenge) == 32, f"Invalid challenge length: {len(challenge)}"

2. Challenge Freshness

import time

challenge_extracted_at = time.time()

# ... solve with CaptchaAI ...

solve_duration = time.time() - challenge_extracted_at
if solve_duration > 90:
    print(f"Warning: {solve_duration:.0f}s since extraction — challenge may be expired")

3. Solution Completeness

solution = captchaai_result["request"]

# Verify all three values present
assert "geetest_challenge" in solution, "Missing geetest_challenge"
assert "geetest_validate" in solution, "Missing geetest_validate"
assert "geetest_seccode" in solution, "Missing geetest_seccode"

# Verify seccode has correct format
assert "|jordan" in solution["geetest_seccode"], "Missing |jordan suffix"

4. Widget State

# Check if the page refreshed the challenge
current_challenge = page.evaluate("""
    () => document.querySelector('[data-challenge]')?.dataset.challenge
""")

if current_challenge != original_challenge:
    print("Challenge was refreshed — need to re-extract and re-solve")

Error Resolution Decision Tree

GeeTest solve failed
├── CaptchaAI returned ERROR?
│   ├── ERROR_WRONG_USER_KEY → Fix API key
│   ├── ERROR_ZERO_BALANCE → Add funds
│   ├── ERROR_CAPTCHA_UNSOLVABLE → Extract fresh challenge, retry
│   └── ERROR_BAD_PARAMETERS → Check gt/challenge values
│
├── CaptchaAI returned solution but site rejected?
│   ├── Challenge expired → Extract + solve + submit faster
│   ├── Wrong gt → Re-extract from correct element
│   ├── Page refreshed challenge → Block challenge refresh
│   └── Wrong GeeTest version → Verify v3 vs v4
│
└── GeeTest registration failed?
    ├── Offline mode → Handle offline verification
    └── HTTP error → Site-specific issue

GeeTest v3 vs v4 Confusion

Feature v3 v4
Parameter names gt, challenge captcha_id
Registration register.php New registration API
Widget class geetest_holder geetest_v4
CaptchaAI method method=geetest Check documentation for v4 support

If you're seeing errors, verify the page uses v3 (not v4) by checking the GeeTest script URL and widget class.

FAQ

Why does GeeTest fail intermittently?

The most common cause is challenge expiration. GeeTest challenges are short-lived — if the solve takes too long or the page refreshes the challenge, the solution becomes invalid.

How do I handle GeeTest offline mode?

In offline mode (success: 0), the challenge verification happens locally on the site's server rather than through GeeTest's API. CaptchaAI can still solve these challenges — submit as normal.

Can I retry with the same challenge?

No. Each challenge is single-use. After an attempt (successful or not), you must extract a fresh challenge from the page.

Next Steps

Solve GeeTest v3 challenges reliably — get your CaptchaAI API key and implement proper error handling.

Discussions (0)

No comments yet.