W tym artykule staraliśmy się odpowiedzieć na wszystkie najważniejsze pytania. Pierwszym krokiem w rozwiązywaniu problemu jest ustalenie, jaki system ochrony jest używany. W tym celu możesz skorzystać z listy popularnych captcha i systemów ochrony antybotowej, gdzie znajdziesz przykłady graficzne oraz kluczowe cechy, które pomogą szybko rozpoznać, z czym masz do czynienia.
Jeśli okaże się, że na Twojej stronie używany jest GeeTest CAPTCHA v3, kolejnym krokiem będzie dokładniejsze poznanie jej właściwości i sposobu działania. W tym artykule możesz również zapoznać się z instrukcją integracji systemu GeeTest CAPTCHA v3, aby w pełni zrozumieć, jak funkcjonuje on na Twojej stronie. Dzięki temu nie tylko lepiej poznasz obecną ochronę, ale też świadomie zaplanujesz jej dalsze utrzymanie.
GeeTest CAPTCHA v3 to system ochrony stron internetowych przed zautomatyzowanymi działaniami, które mogą zaszkodzić serwisowi. Umożliwia odróżnienie prawdziwych użytkowników od botów, zapewniając bezpieczeństwo i stabilne działanie witryny.
Jak rozwiązać GeeTest CAPTCHA v3 za pomocą CapMonster Cloud
Podczas testowania formularzy z GeeTest CAPTCHA v3 często trzeba zweryfikować, czy captcha jest poprawnie zintegrowana i działa.
Możesz ręcznie sprawdzić captchę na swojej stronie.
- Otwórz stronę formularza i upewnij się, że captcha się wyświetla.
- Spróbuj wysłać formularz bez rozwiązania — serwer powinien zwrócić błąd.
- Po poprawnym rozwiązaniu formularz musi wysłać się bez problemów.
Do automatycznego rozwiązywania wykorzystaj narzędzia takie jak CapMonster Cloud, które przyjmują parametry captcha, przetwarzają je na serwerach i zwracają gotowy token. Wstaw go do formularza, aby przejść weryfikację bez udziału użytkownika.
Praca z CapMonster Cloud poprzez API zazwyczaj obejmuje następujące kroki:
W żądaniu rozwiązania GeeTest CAPTCHA v3 należy podać następujące parametry:
type - GeeTestTask;
websiteURL - adres strony, na której użytkownik rozwiązuje captchę. Poprawny adres URL jest przekazywany w nagłówku Referer przy żądaniu do https://api-na.geetest.com/gettype.php;
gt - klucz identyfikacyjny GeeTest gt dla domeny;
challenge - przed każdym zadaniem należy wysłać żądanie, z którego zwracana jest nowa wartość challenge; w przeciwnym razie przeterminowany token spowoduje błąd ERROR_TOKEN_EXPIRED;
geetestApiServerSubdomain - subdomena serwera Geetest API (powinna różnić się od api.geetest.com).
https://api.capmonster.cloud/createTask{
"clientKey":"YOUR_CAPMONSTER_CLOUD_API_KEY",
"task":
{
"type":"GeeTestTask",
"websiteURL":"https://www.example.com",
"gt":"022397c99c9f646f6477822485f30404",
"challenge":"7f044f48bc951ecfbfc03842b5e1fe59",
"geetestApiServerSubdomain":"api-na.geetest.com"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"challenge":"0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate":"6275e26419211d1f526e674d97110e15",
"seccode":"510cd9735583edcb158601067195a5eb|jordan"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
console.log('Otwieramy stronę...');
await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });
console.log('Pobieramy parametry captchy...');
const init = await page.evaluate(async () => {
// Wysyłamy żądanie do serwera, aby pobrać parametry init-params dla GeeTest — podmień na własny endpoint
const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);
return r.json();
});
console.log('Init params:', init);
console.log('Tworzymy zadanie (task) w CapMonster Cloud...');
const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
const sol = solRaw.solution || solRaw;
console.log('Rozwiązanie captchy:', sol);
console.log('Podstawiamy rozwiązanie do ukrytych pól...');
await page.evaluate(s => {
['challenge','validate','seccode'].forEach(n => {
const el = document.querySelector(`input[name="geetest_${n}"]`);
if(el) el.value = s[n];
});
}, sol);
await page.click('button[data-action="test_action"]'); // podmień na własną wartość
console.log('Wysyłamy żądanie weryfikacyjne (verify) do serwera...');
const result = await page.evaluate(async () => {
const payload = {
geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
};
// podmień na własną wartość
const r = await fetch('/api/v1/example/gee-test/verify', {
method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify(payload)
});
return r.json();
});
console.log('Wynik weryfikacji captchy:', result);
await page.waitForTimeout(3000);
await browser.close();
})();1. Zarejestruj się lub zaloguj do swojego konta GeeTest.
2. Przejdź do Captcha Dashboard i wybierz CAPTCHA v3:

3. Kliknij +New Captcha, aby utworzyć nową captchę. Podaj nazwę captchy (np. nazwa produktu lub projektu), adres URL strony, na której będzie zintegrowana, oraz wybierz kontekst użycia captchy (np. Logowanie / Rejestracja / Reset hasła itd.).
4. Otrzymasz unikalne wartości CAPTCHA ID i KEY. Można je skonfigurować w panelu bezpieczeństwa.

5. Skonfiguruj część serwerową (Server SDK):
Serwer korzysta z dwóch interfejsów API:
- API1 — inicjalizacja (utworzenie challenge)
- API2 — weryfikacja wyniku po przejściu captchy
<?php
header('Content-Type: application/json');
const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
function getJson($url) {
$res = @file_get_contents($url);
return $res ? json_decode($res, true) : null;
}
// API1: inicjalizacja
if ($path === '/register') {
$data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
echo json_encode($data ? [
'gt' => CAPTCHA_ID,
'challenge' => $data['challenge'],
'success' => $data['success'] === 1,
'new_captcha' => true
] : ['success' => 0]);
exit;
}
// API2: weryfikacja
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$req = json_decode(file_get_contents('php://input'), true);
$data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
'seccode' => $req['geetest_seccode'] ?? '',
'challenge' => $req['geetest_challenge'] ?? '',
'gt' => CAPTCHA_ID,
'json_format' => 1
]));
echo json_encode(['success' => !empty($data['seccode'])]);
exit;
}
http_response_code(404);
echo json_encode(['error' => 'Not found']);
6. Podłącz część kliencką (Client SDK):
Po stronie klienta ładujesz gt.js i wywołujesz initGeetest, przekazując parametry z serwera (API1). Przykład z użyciem ajax:
ajax({
url: "https://example.com/register",
type: "get",
dataType: "json",
success: function (data) {
initGeetest({
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true
}, function (captchaObj) {
captchaObj.appendTo("#captcha");
captchaObj.onSuccess(function () {
const result = captchaObj.getValidate();
ajax({
url: "https://example.com/validate",
type: "post",
contentType: "application/json",
data: JSON.stringify(result),
success: function(res) {
if (res.success) alert('CAPTCHA passed');
else alert('CAPTCHA failed');
}
});
});
});
}
});
Sprawdzenie działania
Upewnij się, że:
- /register zwraca wartość challenge
- Captcha wyświetla się poprawnie
- Po przejściu captchy w konsoli przeglądarki widoczne jest żądanie do /validate
- Serwer zwraca "success": true
Failback (tryb awaryjny)
Jeśli serwer GeeTest jest niedostępny:
- Klient otrzymuje success: false
- Captcha przechodzi w tryb lokalny (działa bez połączenia z GeeTest Cloud). Aby to przetestować, po prostu podstaw nieprawidłowy CAPTCHA_ID (np. 123456789).
Obsługiwane captchas
Jeśli przejąłeś stronę internetową, na której jest już zainstalowany captcha lub inny system zabezpieczeń, a jednocześnie nie masz dostępu do kodu — to nic strasznego! Dość łatwo jest ustalić, jaka dokładnie technologia jest używana. Aby sprawdzić poprawność działania, możesz skorzystać z usługi rozpoznawania CapMonster Cloud w odizolowanym środowisku testowym, żeby upewnić się, że mechanizm przetwarzania tokenów i logika weryfikacji działają prawidłowo.
W przypadku GeeTest CAPTCHA v3 wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować GeeTest CAPTCHA v3 oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.