Skip to content
API
Geetest капча

Geetest Image Captcha

Обзор

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

🧩

Эта документация поможет вам работать с Geetest Captcha, которая требует от пользователей идентифицировать и нажимать на объекты в определенной последовательности на фоновом изображении. Для капчи типа перетаскивания (drag), пожалуйста, следуйте инструкциям для Tiktok Captcha (тип drag).

Geetest Captcha

1. Создание задачи

Формат отправки изображений

Разделите изображения иконок и фоновые изображения, как показано ниже Click Image Sample

Запрос

POST https://api.achicaptcha.com/createTask

Параметры

Имя параметраТип данныхОбязательно?Описание
clientKeystringдаApi ключ
task.typestringдаGeetestImageCaptchaTask
task.imagestringдаСписок изображений в base64, следующих принципу: icon_1|icon_2|...|icon_n|background (строки Base64, разделенные |)
task.subTypeintдаТип капчи: 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

Параметры

Имя параметраТип данныхОбязательно?Описание
clientKeystringдаApi ключ
taskIdstringда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: Успешно решено, читайте результат в solution
  • errorId = 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)

Коды общих ошибок

Код ошибкиОписаниеПримечания
0successУспешно
1processingВ обработке
2missing required fieldsОтсутствуют обязательные поля, проверьте параметры
3task not supportedТип задачи не поддерживается
4task creation failedОшибка создания задачи
5client key does not existAPI ключ не существует, проверьте API ключ
6insufficient account balanceНедостаточно средств на счете, пополните баланс
7task failed, please create a new taskЗадача не выполнена, пожалуйста, создайте новую задачу
8task ID does not existID задачи не существует

Лучшие практики

Для достижения наилучших результатов при использовании 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 с бэкенда/сервера

Полезные ссылки: