Skip to content
API
Geetest Captcha

Geetest Image Captcha

Tổng quan

Geetest là một hệ thống captcha phổ biến tại Trung Quốc và các nước châu Á, sử dụng các thử thách tương tác như kéo puzzle, nhận dạng hình ảnh. Chúng tôi cung cấp dịch vụ giải tất cả các loại Geetest Image (Geetest v3, Geetest v4, ...) trên trình duyệt, giả lập, phone farm.

🧩

Tài liệu hướng dẫn xử lý Geetest Captcha loại yêu cầu người dùng nhận dạng và click vào các đối tượng theo thứ tự trên hình ảnh background. Đối với loại captcha kéo, vui lòng làm theo hướng dẫn sử dụng Tiktok Captcha loại kéo.

Geetest Captcha

1. Tạo yêu cầu

Mẫu ảnh gửi lên

Cắt riêng các ảnh icon và ảnh background giống mẫu sau Mẫu ảnh click

Request

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

Tham số

Tên paramKiểu dữ liệuBắt buộc?Mô tả
clientKeystringyesApi key
task.typestringyesGeetestImageCaptchaTask
task.imagestringyesDanh sách ảnh dạng base64 theo nguyên tắc: icon_1|icon_2|...|icon_n|background (Các base64 ngăn cách bởi dấu |)
task.subTypeintyesLoại captcha: 7: Chọn vật theo thứ tự

Ví dụ Request

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
  }
}

Lưu ý: Tham số image phải là chuỗi base64 của các ảnh icon và background, ngăn cách nhau bằng dấu |. Thứ tự: icon_1|icon_2|icon_3|...|background

Response

Khi thành công, server sẽ trả về errorId = 0taskId

{
  "errorId": 0,
  "taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

2. Lấy kết quả

Request

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

Tham số

Tên paramKiểu dữ liệuBắt buộc?Mô tả
clientKeystringyesApi key
taskIdstringyesTaskId lấy từ (1)

Ví dụ Request

POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
 
{
  "clientKey": "API_KEY của bạn",
  "taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

Response

{
  "errorId": 0,
  "status": "ready",
  "solution": "x1,y1,x2,y2,x3,y3"
}

Giải thích trạng thái

  • errorId = 0status = ready: Giải thành công, đọc kết quả trong solution
  • errorId = 1status = processing: Đang giải captcha, đợi 1-2 giây rồi thử lại
  • errorId khác 0 và 1: Lỗi hệ thống, đưa ra mã lỗi và mô tả lỗi

Ý nghĩa kết quả trả về

  • solution: Trả về các tọa độ cần click trên captcha, định dạng x1,y1,x2,y2,x3,y3,...
    • Mỗi cặp (x, y) đại diện cho tọa độ pixel cần click trên ảnh background
    • Thứ tự click tương ứng với thứ tự các icon được hiển thị

Ví dụ tích hợp

import requests
import time
 
def solve_geetest_image(base64_images, sub_type=7, api_key='YOUR_API_KEY'):
    # base64_images: "icon1|icon2|icon3|background" - chuỗi base64 ngăn cách bởi |
    
    # Bước 1: Tạo 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']
    
    # Bước 2: Lấy kết quả
    get_result_url = 'https://api.achicaptcha.com/getTaskResult'
    
    while True:
        time.sleep(2)  # Đợi 2 giây
        
        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"
        
        # Nếu status == 'processing', tiếp tục loop
 
# Sử dụng
# Giả sử bạn đã có các ảnh dạng base64
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 tọa độ và sử dụng
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})')
    # Thực hiện click vào tọa độ (x, y)

Các mã lỗi thường gặp

Mã lỗiMô tảChú thích
0successThành công
1processingĐang xử lý
2missing required fieldsThiếu trường bắt buộc, kiểm tra lại tham số
3task not supportedLoại task không được hỗ trợ
4task creation failedTạo task thất bại
5client key does not existAPI key không tồn tại, kiểm tra lại API key
6insufficient account balanceSố dư tài khoản không đủ, nạp thêm credit
7task failed, please create a new taskTask thất bại, vui lòng tạo task mới
8task ID does not existTask ID không tồn tại

Best Practices

Để đạt hiệu quả tốt nhất khi sử dụng API Achicaptcha cho Geetest Image, hãy tuân thủ các nguyên tắc sau:

1. Chuẩn bị ảnh đúng định dạng

  • Tất cả ảnh phải được encode sang base64
  • Thứ tự ảnh: icon_1|icon_2|...|icon_n|background
  • Các ảnh base64 ngăn cách nhau bằng ký tự |
  • Đảm bảo ảnh background là ảnh cuối cùng trong chuỗi

2. Sử dụng kết quả đúng cách

  • Kết quả trả về là chuỗi tọa độ: x1,y1,x2,y2,x3,y3,...
  • Mỗi cặp (x, y) là tọa độ pixel trên ảnh background
  • Thứ tự click tương ứng với thứ tự các icon hiển thị
  • Click chính xác vào tọa độ để hoàn thành captcha

3. Polling interval

  • Đợi ít nhất 1-2 giây giữa các lần kiểm tra kết quả
  • Không spam API với quá nhiều request liên tiếp
  • Có timeout để tránh vòng lặp vô hạn (khuyến nghị 60 giây)

4. Xử lý lỗi

  • Kiểm tra errorId = 1 cho trạng thái processing
  • Retry cho các lỗi tạm thời (errorId = 6, 7)
  • Tạo task mới nếu task hiện tại thất bại
  • Giới hạn số lần retry tối đa

5. Bảo mật API key

  • Không hardcode API key trong code
  • Sử dụng biến môi trường
  • Không expose API key ra client-side
  • Thực hiện API call từ backend/server

Liên kết hữu ích: