Geetest Image Captcha
Ringkasan
Geetest adalah sistem captcha populer di Tiongkok dan negara-negara Asia, menggunakan tantangan interaktif seperti menyeret puzzle dan pengenalan gambar. Kami menyediakan layanan untuk memecahkan semua jenis Geetest Image (Geetest v3, Geetest v4, ...) di browser, emulator, dan phone farm.
Dokumentasi ini memandu Anda menangani Geetest Captcha yang mengharuskan pengguna mengidentifikasi dan mengklik objek secara berurutan pada gambar latar belakang. Untuk captcha jenis seret, silakan ikuti instruksi untuk Tiktok Captcha jenis seret.

1. Buat Task
Format Pengiriman Gambar
Pisahkan gambar ikon dan gambar latar belakang seperti gambar di bawah ini

Request
POST https://api.achicaptcha.com/createTask
Parameter
| Nama Parameter | Tipe Data | Wajib? | Deskripsi |
|---|---|---|---|
clientKey | string | ya | Api key |
task.type | string | ya | GeetestImageCaptchaTask |
task.image | string | ya | Daftar gambar base64 mengikuti prinsip: icon_1|icon_2|...|icon_n|background (String Base64 dipisahkan dengan |) |
task.subType | int | ya | Jenis captcha: 7: Pilih objek secara berurutan |
Contoh 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
}
}Catatan: Parameter image harus berupa string base64 dari gambar ikon dan latar belakang, dipisahkan dengan |. Urutan: icon_1|icon_2|icon_3|...|background
Response
Ketika berhasil, server mengembalikan errorId = 0 dan taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}2. Dapatkan Hasil
Request
POST https://api.achicaptcha.com/getTaskResult
Parameter
| Nama Parameter | Tipe Data | Wajib? | Deskripsi |
|---|---|---|---|
clientKey | string | ya | Api key |
taskId | string | ya | TaskId yang diperoleh dari (1) |
Contoh Request
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Response
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2,x3,y3"
}Penjelasan Status
errorId = 0danstatus = ready: Berhasil dipecahkan, baca hasil disolutionerrorId = 1danstatus = processing: Sedang memecahkan captcha, tunggu 1-2 detik dan coba lagierrorIdselain 0 dan 1: Error sistem, mengembalikan kode error dan deskripsi
Arti Hasil
solution: Mengembalikan koordinat untuk diklik pada captcha, formatx1,y1,x2,y2,x3,y3,...- Setiap pasangan (x, y) mewakili koordinat piksel untuk diklik pada gambar latar belakang
- Urutan klik sesuai dengan urutan ikon yang ditampilkan
Contoh Integrasi
import requests
import time
def solve_geetest_image(base64_images, sub_type=7, api_key='YOUR_API_KEY'):
# base64_images: "icon1|icon2|icon3|background" - string base64 dipisahkan dengan |
# Langkah 1: Buat 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']
# Langkah 2: Dapatkan hasil
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Tunggu 2 detik
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"
# Jika status == 'processing', lanjutkan loop
# Penggunaan
# Asumsikan Anda memiliki gambar 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('Koordinat Geetest:', solution) # "x1,y1,x2,y2,x3,y3"
# Parse koordinat dan gunakan
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'Klik di ({x}, {y})')
# Lakukan klik pada koordinat (x, y)Kode Error Umum
| Kode Error | Deskripsi | Catatan |
|---|---|---|
| 0 | sukses | Berhasil |
| 1 | sedang diproses | Sedang diproses |
| 2 | field wajib tidak ada | Field wajib tidak ada, periksa parameter lagi |
| 3 | task tidak didukung | Tipe task tidak didukung |
| 4 | pembuatan task gagal | Pembuatan task gagal |
| 5 | client key tidak ada | API key tidak ada, periksa API key lagi |
| 6 | saldo akun tidak cukup | Saldo akun tidak cukup, tambahkan credits |
| 7 | task gagal, silakan buat task baru | Task gagal, silakan buat task baru |
| 8 | task ID tidak ada | Task ID tidak ada |
Praktik Terbaik
Untuk hasil terbaik saat menggunakan Achicaptcha API untuk Geetest Image, ikuti prinsip-prinsip berikut:
1. Siapkan Gambar dalam Format yang Benar
- Semua gambar harus dikodekan ke base64
- Urutan gambar:
icon_1|icon_2|...|icon_n|background - Gambar base64 dipisahkan dengan karakter
| - Pastikan gambar latar belakang adalah yang terakhir dalam string
2. Gunakan Hasil dengan Benar
- Hasil yang dikembalikan adalah string koordinat:
x1,y1,x2,y2,x3,y3,... - Setiap pasangan (x, y) adalah koordinat piksel pada gambar latar belakang
- Urutan klik sesuai dengan urutan ikon yang ditampilkan
- Klik dengan tepat pada koordinat untuk menyelesaikan captcha
3. Interval Polling
- Tunggu setidaknya 1-2 detik antara pemeriksaan hasil
- Jangan spam API dengan terlalu banyak permintaan berturut-turut
- Tetapkan timeout untuk menghindari loop tak terbatas (disarankan 60 detik)
4. Penanganan Error
- Periksa
errorId = 1untuk status pemrosesan - Coba lagi untuk error sementara (errorId = 6, 7)
- Buat task baru jika task saat ini gagal
- Batasi jumlah maksimum percobaan ulang
5. Keamanan API Key
- Jangan hardcode API key dalam kode
- Gunakan variabel lingkungan
- Jangan ekspos API key di sisi klien
- Lakukan panggilan API dari backend/server
Link berguna: