Skip to content
API
Geetest验证码

Geetest 图片验证码

概述

Geetest 是中国和亚洲国家流行的验证码系统,使用拼图拖动和图像识别等交互式挑战。我们提供在浏览器、模拟器和手机农场上解决所有类型的 Geetest 图片(Geetest v3、Geetest v4 等)的服务。

🧩

本文档指导您处理需要用户按顺序识别和点击背景图片上的对象的 Geetest 验证码。对于拖动类型验证码,请遵循 Tiktok 验证码 拖动类型的说明。

Geetest Captcha

1. 创建任务

图片提交格式

分离图标图片和背景图片,如下所示 点击图片示例

请求

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

参数

参数名称数据类型是否必需描述
clientKeystringAPI密钥
task.typestringGeetestImageCaptchaTask
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 = 0taskId

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

2. 获取结果

请求

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

参数

参数名称数据类型是否必需描述
clientKeystringAPI密钥
taskIdstring从(1)获取的TaskId

请求示例

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 = 0status = ready:成功解决,在 solution 中读取结果
  • errorId = 1status = 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字符串
    
    # 步骤1:创建任务
    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']
    
    # 步骤2:获取结果
    get_result_url = 'https://api.achicaptcha.com/getTaskResult'
    
    while True:
        time.sleep(2)  # 等待2秒
        
        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"
        
        # 如果 status == 'processing',继续循环
 
# 使用方法
# 假设您有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坐标:', solution)  # "x1,y1,x2,y2,x3,y3"
 
# 解析坐标并使用
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'点击坐标 ({x}, {y})')
    # 在坐标 (x, y) 处执行点击

常见错误代码

错误代码描述备注
0成功成功
1处理中处理中
2缺少必填字段缺少必填字段,请再次检查参数
3不支持的任务不支持的任务类型
4任务创建失败任务创建失败
5客户端密钥不存在API密钥不存在,请再次检查API密钥
6账户余额不足账户余额不足,请充值
7任务失败,请创建新任务任务失败,请创建新任务
8任务ID不存在任务ID不存在

最佳实践

为了在使用Achicaptcha API处理Geetest图片时获得最佳结果,请遵循以下原则:

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调用

有用的链接: