How to Solve GeeTest with DeathByCaptcha API
GeeTest is a behavioral CAPTCHA that uses slide puzzles, image selection, and behavioral analysis to differentiate humans from bots. It is widely used by Chinese and international websites, making it a common challenge for web scraping and automation teams.
DeathByCaptcha's geetest solver handles all GeeTest variants through a single API endpoint.
The solving flow looks like this:

GeeTest Variants
DBC supports all major GeeTest types:
- Slide (GeeTest v3): Drag a puzzle piece to the correct position.
- Select (GeeTest v3): Select images matching a description.
- GeeTest v4: Full-page behavioral challenge with advanced anti-bot detection.
Solving GeeTest with DBC
Python
import deathbycaptcha
client = deathbycaptcha.SocketClient("username", "password")
result = client.decode({
"gt": "YOUR_GT_KEY",
"challenge": "YOUR_CHALLENGE",
"pageurl": "https://example.com"
}, type=8, timeout=60)
if result:
solution = result.text
# Solution contains validate, seccode, and challenge values
Node.js
const DBC = require('deathbycaptcha');
const client = new DBC.SocketClient('username', 'password');
const result = await client.decode({
gt: 'YOUR_GT_KEY',
challenge: 'YOUR_CHALLENGE',
pageurl: 'https://example.com'
}, 60, 6);
console.log('Solution:', result.text);
PHP
require_once 'deathbycaptcha.php';
$client = new DeathByCaptcha_HttpClient("username", "password");
$geetest_params = json_encode([
'gt' => 'YOUR_GT_KEY',
'challenge' => 'YOUR_CHALLENGE',
'pageurl' => 'https://example.com',
]);
$captcha = $client->decode(null, ['type' => 8, 'geetest_params' => $geetest_params]);
if ($captcha) {
echo "Solution: " . $captcha["text"] . "\n";
}
Java
import com.DeathByCaptcha.Client;
import com.DeathByCaptcha.HttpClient;
import com.DeathByCaptcha.Captcha;
import org.json.JSONObject;
Client client = new HttpClient("username", "password");
JSONObject params = new JSONObject();
params.put("gt", "YOUR_GT_KEY");
params.put("challenge", "YOUR_CHALLENGE");
params.put("pageurl", "https://example.com");
Captcha captcha = client.decode(8, params);
if (captcha != null) {
System.out.println("Solution: " + captcha.text);
}
Go
package main
import (
"encoding/json"
"fmt"
"log"
dbc "github.com/deathbycaptcha/deathbycaptcha-api-client-go/v4/deathbycaptcha"
)
func main() {
client := dbc.NewHttpClient("username", "password")
defer client.Close()
geetestParams, _ := json.Marshal(map[string]string{
"gt": "YOUR_GT_KEY",
"challenge": "YOUR_CHALLENGE",
"pageurl": "https://example.com",
})
captcha, err := client.Decode(nil, dbc.DefaultTokenTimeout, map[string]string{
"type": "8",
"geetest_params": string(geetestParams),
})
if err != nil {
log.Fatal(err)
}
if captcha != nil {
fmt.Println("Solution:", *captcha.Text)
}
}
C
using System.Collections;
using DeathByCaptcha;
Client client = new DeathByCaptcha.HttpClient("username", "password");
string geetestParams = "{\"gt\":\"YOUR_GT_KEY\",\"challenge\":\"YOUR_CHALLENGE\",\"pageurl\":\"https://example.com\"}";
Captcha captcha = client.Decode(Client.DefaultTimeout,
new Hashtable { { "type", 8 }, { "geetest_params", geetestParams } });
if (captcha != null)
Console.WriteLine("Solution: " + captcha.Text);
cURL
curl --data-urlencode "username=YOUR_USERNAME" \
--data-urlencode "password=YOUR_PASSWORD" \
--data-urlencode "type=8" \
--data-urlencode 'geetest_params={"gt":"YOUR_GT_KEY","challenge":"YOUR_CHALLENGE","pageurl":"https://example.com"}' \
http://api.dbcapi.me/api/captcha
The response is JSON and the solved validate/seccode values arrive in the text field.
Parameters Explained
| Parameter | Description |
|---|---|
gt |
GeeTest captcha ID from the website |
challenge |
Dynamic challenge value from the page |
pageurl |
Full URL of the page with the GeeTest |
Integrating with Playwright
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
# Extract GeeTest parameters from the page
gt = page.evaluate("() => window.geetest.gt")
challenge = page.evaluate("() => window.geetest.challenge")
# Solve via DBC
cid, solution = client.decode({
"gt": gt, "challenge": challenge,
"pageurl": "https://example.com"
}, type=8)
# Inject solution back into the page
page.evaluate(f"""
window.geetest.validate = '{solution["validate"]}';
window.geetest.seccode = '{solution["seccode"]}';
""")
Why Use DBC for GeeTest
- Supports both GeeTest v3 and v4 variants.
- Hybrid solving model handles the hardest behavioral challenges.
- Sub-second automated solves for standard slide puzzles.
- Proven reliability for high-volume Chinese website scraping.

Portuguese
English
Spanish
Russian
Chinese
French
Hindi
Arabic
Bengali
Indonesian
com, 