Skip to content
API
Geetest Captcha

Geetest Image Captcha

ภาพรวม

Geetest เป็นระบบแคปช่ายอดนิยมในจีนและประเทศในเอเชีย โดยใช้ความท้าทายแบบโต้ตอบ เช่น การลากจิ๊กซอว์และการจดจำรูปภาพ เราให้บริการแก้ Geetest Image ทุกประเภท (Geetest v3, Geetest v4, ...) บนเบราว์เซอร์ เครื่องจำลอง และฟาร์มโทรศัพท์

🧩

เอกสารนี้แนะนำวิธีการจัดการ Geetest Captcha ซึ่งกำหนดให้ผู้ใช้ระบุและคลิกวัตถุตามลำดับบนรูปภาพพื้นหลัง สำหรับแคปช่าประเภทลาก โปรดปฏิบัติตามคำแนะนำสำหรับ Tiktok Captcha ประเภทลาก

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 other than 0 and 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 existไม่มีคีย์ API ตรวจสอบคีย์ API อีกครั้ง
6insufficient account balanceยอดเงินในบัญชีไม่เพียงพอ เติมเครดิต
7task failed, please create a new taskงานล้มเหลว โปรดสร้างงานใหม่
8task 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 จากแบ็กเอนด์/เซิร์ฟเวอร์

ลิงก์ที่มีประโยชน์: