Geetest Image Captcha
Обзор
Geetest — это популярная система капчи в Китае и азиатских странах, использующая интерактивные задачи, такие как перетаскивание пазлов и распознавание изображений. Мы предоставляем услуги по решению всех типов Geetest Image (Geetest v3, Geetest v4, ...) в браузерах, симуляторах и на фермах телефонов.
Эта документация поможет вам работать с Geetest Captcha, которая требует от пользователей идентифицировать и нажимать на объекты в определенной последовательности на фоновом изображении. Для капчи типа перетаскивания (drag), пожалуйста, следуйте инструкциям для Tiktok Captcha (тип drag).

1. Создание задачи
Формат отправки изображений
Разделите изображения иконок и фоновые изображения, как показано ниже

Запрос
POST https://api.achicaptcha.com/createTask
Параметры
| Имя параметра | Тип данных | Обязательно? | Описание |
|---|---|---|---|
clientKey | string | да | Api ключ |
task.type | string | да | GeetestImageCaptchaTask |
task.image | string | да | Список изображений в base64, следующих принципу: icon_1|icon_2|...|icon_n|background (строки Base64, разделенные |) |
task.subType | int | да | Тип капчи: 7: Выбор объектов по порядку |
Пример запроса
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeetestImageCaptchaTask",
"image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...",
"subType": 7
}
}Примечание: Параметр image должен быть строкой base64 изображений иконок и фона, разделенных |. Порядок: icon_1|icon_2|icon_3|...|background
Ответ
При успехе сервер возвращает errorId = 0 и taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}2. Получение результата
Запрос
POST https://api.achicaptcha.com/getTaskResult
Параметры
| Имя параметра | Тип данных | Обязательно? | Описание |
|---|---|---|---|
clientKey | string | да | Api ключ |
taskId | string | да | TaskId, полученный из (1) |
Пример запроса
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Ответ
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2,x3,y3"
}Пояснение статусов
errorId = 0иstatus = ready: Успешно решено, читайте результат вsolutionerrorId = 1иstatus = processing: Решение капчи, подождите 1-2 секунды и попробуйте сноваerrorIdотличный от 0 и 1: Системная ошибка, возвращает код ошибки и описание
Значение результата
solution: Возвращает координаты для клика по капче, форматx1,y1,x2,y2,x3,y3,...- Каждая пара (x, y) представляет пиксельные координаты для клика на фоновом изображении
- Порядок кликов соответствует порядку отображаемых иконок
Примеры интеграции
import requests
import time
def solve_geetest_image(base64_images, sub_type=7, api_key='YOUR_API_KEY'):
# base64_images: "icon1|icon2|icon3|background" - base64 string separated by |
# Step 1: Create task
create_task_url = 'https://api.achicaptcha.com/createTask'
create_task_payload = {
'clientKey': api_key,
'task': {
'type': 'GeetestImageCaptchaTask',
'image': base64_images,
'subType': sub_type
}
}
response = requests.post(create_task_url, json=create_task_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
task_id = result['taskId']
# Step 2: Get result
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Wait 2 seconds
get_result_payload = {
'clientKey': api_key,
'taskId': task_id
}
response = requests.post(get_result_url, json=get_result_payload)
result = response.json()
if result['errorId'] not in [0, 1]:
raise Exception(result['errorDescription'])
if result['status'] == 'ready':
return result['solution'] # "x1,y1,x2,y2,x3,y3"
# If status == 'processing', continue loop
# Usage
# Assume you have base64 images
icon1_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
icon2_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
icon3_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
background_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
base64_images = f'{icon1_base64}|{icon2_base64}|{icon3_base64}|{background_base64}'
solution = solve_geetest_image(base64_images, 7, 'YOUR_API_KEY')
print('Geetest coordinates:', solution) # "x1,y1,x2,y2,x3,y3"
# Parse coordinates and use
coords = [int(c) for c in solution.split(',')]
for i in range(0, len(coords), 2):
x, y = coords[i], coords[i + 1]
print(f'Click at ({x}, {y})')
# Perform click at coordinates (x, y)Коды общих ошибок
| Код ошибки | Описание | Примечания |
|---|---|---|
| 0 | success | Успешно |
| 1 | processing | В обработке |
| 2 | missing required fields | Отсутствуют обязательные поля, проверьте параметры |
| 3 | task not supported | Тип задачи не поддерживается |
| 4 | task creation failed | Ошибка создания задачи |
| 5 | client key does not exist | API ключ не существует, проверьте API ключ |
| 6 | insufficient account balance | Недостаточно средств на счете, пополните баланс |
| 7 | task failed, please create a new task | Задача не выполнена, пожалуйста, создайте новую задачу |
| 8 | task ID does not exist | ID задачи не существует |
Лучшие практики
Для достижения наилучших результатов при использовании Achicaptcha API для Geetest Image, следуйте этим принципам:
1. Подготовьте изображения в правильном формате
- Все изображения должны быть закодированы в base64
- Порядок изображений:
icon_1|icon_2|...|icon_n|background - Изображения Base64 разделяются символом
| - Убедитесь, что фоновое изображение находится последним в строке
2. Правильно используйте результаты
- Возвращаемый результат — это строка координат:
x1,y1,x2,y2,x3,y3,... - Каждая пара (x, y) — это пиксельные координаты на фоновом изображении
- Порядок кликов соответствует порядку отображаемых иконок
- Кликайте точно по координатам для выполнения капчи
3. Интервал опроса
- Ждите не менее 1-2 секунд между проверками результата
- Не отправляйте слишком много последовательных запросов к API
- Установите тайм-аут, чтобы избежать бесконечных циклов (рекомендуется 60 секунд)
4. Обработка ошибок
- Проверяйте
errorId = 1для статуса обработки - Повторяйте попытку для временных ошибок (errorId = 6, 7)
- Создайте новую задачу, если текущая задача не выполнена
- Ограничьте максимальное количество попыток
5. Безопасность API ключа
- Не прописывайте API ключ жестко в коде
- Используйте переменные окружения
- Не раскрывайте API ключ на стороне клиента
- Делайте вызовы API с бэкенда/сервера
Полезные ссылки: