Большинство сбоев GeeTest v3 попадают в одну из трех категорий: ошибки на этапе запроса (отправка в API), ошибки на этапе результата (опрос ответа) и сбои проверки целевой страницы (API возвращает значения, но страница все равно их отклоняет). Самая большая проблема, специфичная для GeeTest, почти всегда одна и та же: устаревшее значение challenge.
CaptchaAIДокументация по API GeeTest v3являются явными: вы должны получить новое значение challenge для каждого запроса на решение. Как только капча загрузится на странице, старый запрос станет недействительным. Это означает, что интеграция GeeTest может завершиться неудачно, даже если запрос выглядит в основном правильным.
В этом руководстве рассматриваются все распространенные модели сбоев и указаны быстрый по внутренней выборке способы устранения каждой из них.
Ошибка GeeTest №1: устаревший challenge
Если и есть что-то, что нужно проверить в первую очередь, так это свежесть.
GeeTest v3 требует два ключевых параметра:
gt— публичный ключ сайта (статический, не меняется)challenge— динамический ключ вызова (меняется при каждой загрузке страницы)
Почему он ломается
Значение challenge генерируется при инициализации виджета GeeTest на странице. Если вы захватите его один раз и повторно используете в нескольких запросах на решение, каждый запрос после первого будет либо:
- быть отклонено API во время отправки или
- выдать результат, который целевая страница отклоняет, поскольку срок действия запроса истек
Как это исправить
Перед каждым запросом на решение проверяйте сетевые запросы страницы, чтобы найти вызов API, который возвращает новый challenge. Повторите этот запрос, чтобы получить новое значение, а затем немедленно отправьте его в 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
Практическое правило: Если время между захватом
challengeи отправкой запроса на решение превышает несколько секунд, обновите его.
Ошибки на этапе запроса
Эти сбои происходят, когда вы отправляете задачу https://ocr.captchaai.com/in.php.
ERROR_WRONG_USER_KEY
Причина: Неправильный формат ключа API (он должен состоять из 32 символов).
Исправление: проверьте ключ отcaptchaai.com/api.php. Не добавляйте лишние символы и пробелы.
ERROR_KEY_DOES_NOT_EXIST
Причина: Ключ API отформатирован правильно, но не соответствует ни одной активной учетной записи.
Исправление: войдите в свою панель управления CaptchaAI и подтвердите, что ваш ключ активен.
ERROR_ZERO_BALANCE
Причина: В вашем текущем плане нет бесплатных тем.
Исправление. Подождите, пока потоки освободятся, уменьшите параллелизм или обновите свой план.
ERROR_PAGEURL
Причина: В запросе отсутствует параметр pageurl.
Исправление: Добавьте полный URL-адрес страницы, на которой загружается виджет GeeTest. Пример:
pageurl=https://https://staging.example.com/qa-login
ERROR_BAD_PARAMETERS
Причина: Одно или несколько обязательных полей отсутствуют или имеют неправильный формат. Для GeeTest обязательные параметры:
| Параметр | Тип | Необходимый | Описание |
|---|---|---|---|
key |
Нить | Да | Ваш API-ключ CaptchaAI |
method |
Нить | Да | Должно быть geetest |
gt |
Нить | Да | Статический публичный ключ сайта |
challenge |
Нить | Да | Ключ динамического вызова (должен быть свежим) |
pageurl |
Нить | Да | Полный URL-адрес страницы |
Исправление. Убедитесь, что gt, challenge и pageurl присутствуют и правильно отформатированы.
HTML или 500/502 ответы
Причина: Временная ошибка на стороне сервера — не проблема с параметром.
Исправление. Подождите 5–10 секунд и повторите запрос.
Ошибки на этапе результата
Эти сбои происходят при опросе https://ocr.captchaai.com/res.php.
CAPCHA_NOT_READY
Это не ошибка. Это означает, что капча еще решается. GeeTest v3 решает задачу CaptchaAI обычно занимает менее 12 секунд с вероятностью успеха 100%.
Исправление: подождите 5 секунд и повторите опрос. Не воспринимайте это как неудачу.
ERROR_WRONG_ID_FORMAT
Причина: Неправильный формат идентификатора капчи — идентификаторы должны быть только числовыми.
Исправление. Убедитесь, что вы используете точный идентификатор, возвращенный in.php, без изменений.
ERROR_WRONG_CAPTCHA_ID
Причина: Идентификатор не соответствует ни одной отправленной задаче.
Исправление. Убедитесь, что вы используете правильный идентификатор из отправленного ответа. Если вы отправили несколько задач, убедитесь, что вы выбираете нужную.
ERROR_EMPTY_ACTION
Причина: Параметр action отсутствует или пуст в вашем запросе на опрос.
Исправление: Включайте action=get в каждый запрос на опрос:
https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID
ERROR_CAPTCHA_UNSOLVABLE
Причина: Не удалось решить проблему — возможно, из-за устаревшего значения challenge или неподдерживаемого варианта GeeTest.
Исправление. Обновите значение challenge и повторите попытку.
ERROR_INTERNAL_SERVER_ERROR
Причина: Проблема на стороне сервера CaptchaAI.
Исправление: подождите 10 секунд и повторите попытку.
Сбои проверки целевой страницы
Это самые сложные ошибки для отладки, поскольку API CaptchaAI возвращает действительный результат, но целевая страница все равно его отклоняет.
При успешном решении GeeTest v3 API возвращает три значения:
{
"challenge": "1a2b3456cd67890e12345fab678901c2de",
"validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
"seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}
Они должны быть отправлены на целевую страницу как:
| Поле ответа API | Поле целевой страницы |
|---|---|
challenge |
geetest_challenge |
validate |
geetest_validate |
seccode |
geetest_seccode |
Ошибка 1: неправильное сопоставление полей.
Симптом: API возвращает значения, но целевая страница немедленно их отклоняет.
Причина: Возвращенные значения вставлены в неправильные поля или неправильный путь запроса.
Исправление: проверьте сетевой трафик с помощью ручного решения GeeTest на целевой странице. Найдите запрос POST, который отправляет результат GeeTest и точно соответствует именам полей.
Ошибка 2: устаревший challenge используется в восходящем направлении
Симптом: API возвращает значения, но на странице сообщается, что запрос просрочен или недействителен.
Причина: Значение challenge было получено слишком рано или использовано повторно.
Исправление: получайте новый challenge непосредственно перед каждым запросом на решение. Не кэшируйте и не используйте его повторно.
Ошибка 3: неправильный контекст страницы.
Признак: Проверка не выполняется даже при наличии новых входных данных.
Причина: pageurl, отправленный на CaptchaAI, не соответствует фактической странице, на которой был загружен виджет GeeTest.
Исправление. Используйте точный URL, включая протокол и путь. Если виджет загружается через AJAX по другому маршруту, используйте URL-адрес этого маршрута.
Ошибка 4: несоответствие структуры запроса
Симптом: поля верны, но формат запроса неправильный.
Причина: Целевая страница ожидает поля GeeTest в определенном типе контента (например, тело JSON или закодированное в форме) или рядом с другими полями формы.
Исправление. Сравните ваш запрос на отправку с сетевым трафиком, полученным при ручном решении. Сопоставьте тип контента, порядок полей и любые дополнительные поля.
Краткий справочник по устранению ошибок
| Ошибка/симптом | Этап | Вероятная причина | Исправить |
|---|---|---|---|
ERROR_WRONG_USER_KEY |
Представлять на рассмотрение | Неверный ключ API | Проверьте 32-значный ключ |
ERROR_KEY_DOES_NOT_EXIST |
Представлять на рассмотрение | Неверный ключ | Проверьте панель управления |
ERROR_ZERO_BALANCE |
Представлять на рассмотрение | Нет бесплатных тем | Подождите или обновите план |
ERROR_PAGEURL |
Представлять на рассмотрение | Отсутствует pageurl |
Добавить полный URL страницы |
ERROR_BAD_PARAMETERS |
Представлять на рассмотрение | Отсутствуют gt, challenge или pageurl. |
Проверьте все обязательные поля |
CAPCHA_NOT_READY |
Голосование | Решение в процессе | Подождите 5 секунд, повторите попытку. |
ERROR_WRONG_ID_FORMAT |
Голосование | Нечисловой идентификатор капчи | Используйте точный идентификатор из in.php. |
ERROR_WRONG_CAPTCHA_ID |
Голосование | Неверный идентификатор капчи | Проверьте идентификатор отправки |
ERROR_EMPTY_ACTION |
Голосование | Отсутствует action=get |
Добавить параметр действия |
ERROR_CAPTCHA_UNSOLVABLE |
Голосование | Устаревшая задача или неподдерживаемый вариант | Обновить соревнование, повторить попытку |
| API возвращает значения, но страница отклоняется | Валидация | Устаревший запрос, неправильные поля, неверный URL-адрес | Обновить задачу, проверить сопоставление полей |
Python: завершите решение GeeTest v3 с новой задачей
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://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: завершите решение GeeTest v3 с новой задачей
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://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
})();
Часто задаваемые вопросы
Почему GeeTest продолжает терпеть неудачу, даже если запрос выглядит правильно?
Наиболее распространенной причиной является устаревшее значение challenge. Даже если gt и pageurl верны, запрос с истекшим сроком действия приведет к сбою API или к тому, что целевая страница отклонит возвращаемые значения. Всегда получайте новое задание непосредственно перед каждым запросом на решение.
Какая самая распространенная ошибка GeeTest v3?
Повторное использование значения challenge, которое уже не актуально. Документы CaptchaAI прямо предупреждают, что как только капча загрузится на странице, старый запрос станет недействительным.
Что означает CAPCHA_NOT_READY?
Это означает, что решение все еще продолжается, а не ошибка. Подождите 5 секунд и снова опросите res.php. Решение GeeTest v3 на CaptchaAI обычно занимает менее 12 секунд.
Что делать, если API возвращает значения, но страница их по-прежнему отклоняет?
Проверьте три вещи по порядку:
- Вызов свежести — Был ли
challengeполучен непосредственно перед отправкой? - Сопоставление полей. Правильно ли сопоставлены поля
geetest_challenge,geetest_validateиgeetest_seccodeс ожидаемыми полями целевой страницы? - Структура запроса. Ожидает ли целевая страница JSON, данные в форме или другой формат? Сравните с сетевым трафиком, полученным вручную.
Чем GeeTest v3 отличается от reCAPTCHA v2?
GeeTest v3 — это задача-головоломка /slider (не флажок). Для этого требуется динамический параметр challenge, который необходимо обновлять для каждого решения. API возвращает три поля проверки (challenge, validate, seccode) вместо одного токена. Для решения reCAPTCHA v2 см.Как решить reCAPTCHA v2 с помощью API.
Поддерживает ли CaptchaAI GeeTest v4?
В этой статье рассматривается только GeeTest v3. ПроверьтеДокументация по API CaptchaAIдля последних поддерживаемых типов капчи.
Исправьте рабочий процесс GeeTest
Если ваша интеграция с GeeTest не удалась:
- Проверьте задание — Оно свежее? Приносите новый непосредственно перед каждым решением.
- Проверьте параметры —
gt,challenge,pageurlдолжны быть правильными. - Проверка сопоставления полей — возвращаемые значения
challenge,validateиseccodeдолжны находиться в правильных полях. - Сравните с решением вручную. Используйте DevTools браузера, чтобы получить точную структуру запроса в результате успешного решения GeeTest вручную.
Начните сCaptchaAI GeeTest v3 решатель, подтвердите свои параметры относительноДокументация по APIи читатьКак работает капча GeeTest v3если вам нужна информация о потоке задач.
Журнал итераций
| Итерация | Фокус | Изменения |
|---|---|---|
| Проект 1 | Структура и содержание | Первоначальный вариант устранения неполадок — 3 стадии ошибок, таблица ошибок, которые нужно исправить, часто задаваемые вопросы |
| Проект 2 | Техническая точность | Проверены все коды ошибок и параметры GeeTest на соответствие captchaai.com/api-docs. Добавлена таблица параметров API. Подтверждено сопоставление полей /validate/seccode. |
| Проект 3 | Примеры кода | Добавлены полные примеры Python и Node.js с новой выборкой. Добавлен псевдокод для шаблона обновления задачи. |
| Проект 4 | Глубина ошибок проверки | Расширенный раздел проверки целевой страницы с 4 различными режимами сбоя. Добавлена таблица сопоставления полей. Добавлена диагностика несоответствия структуры запроса. |
| Проект 5 | Финальная проверка качества | Проверено, что все коды ошибок соответствуют официальным документам. Добавлена краткая справочная таблица. Затянутое вступление. Добавлены перекрестные ссылки на статьи кластера. Подтвержденные ответы на часто задаваемые вопросы готовы для схемы. |
Краткое описание визуальных активов
Изображение героя
- Замещающий текст: Устранение разработчиком ошибок GeeTest v3 — запрос, опрос и диагностика ошибок проверки.
- Обязательно показывать: Контекст отладки с указанием этапов потока ошибок и точек сбоя.
- Имя файла: geetest-v3-errors-troubleshooting-hero.png
Визуализация в статье 1
- Место размещения: После «Ошибок на этапе результата».
- Тип: Дерево решений
- Замещающий текст: Дерево решений для сбоев GeeTest v3 — ошибки запроса, ошибки опроса и ошибки проверки.
- Имя файла: geetest-v3-error-decision-tree.png
Визуализация в статье 2
- Место размещения: После сообщения «Ошибки проверки целевой страницы».
- Тип: Диаграмма причин и исправлений
- Замещающий текст: Диаграмма, показывающая распространенные причины отклонения страницы GeeTest v3 и способы их устранения.
- Имя файла: geetest-v3-validation-causes-fixes.png
Похожие статьи
- Решение Geetest V3 Nodejs
- Решение Geetest V3 Nodejs Captchaai
- Распространенные ошибки и исправления капчи в виде сетки