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 v4, 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 v4, 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.
Podczas testowania formularzy z GeeTest CAPTCHA v4 często trzeba zweryfikować, czy captcha jest poprawnie zintegrowana i działa.
Możesz ręcznie sprawdzić captchę na swojej stronie.
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 v4 należy podać następujące parametry:
type - GeeTestTask;
websiteURL - adres strony, na której rozwiązywana jest captcha;
gt - klucz identyfikacyjny GeeTest dla domeny – parametr captcha_id;
version - 4;
geetestApiServerSubdomain - subdomena serwera API GeeTest (musi być inna niż api.geetest.com);
geetestGetLib - ścieżka do skryptu captchy, odpowiedzialnego za jej wyświetlanie na stronie; może być wymagana dla niektórych serwisów;
initParameters - dodatkowe parametry dla wersji 4, używane razem z „riskType” (typ captchy / sposób jej weryfikacji).
https://api.capmonster.cloud/createTask{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. Przechwycenie odpowiedzi /load (ustalenie captcha_id, challenge itd.)
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. Załadowanie strony
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. Oczekiwanie, aż odpowiedź /load zostanie przechwycona
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. Wysłanie zadania do CapMonster Cloud
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. Podstawienie własnych wartości w /verify, aby uzyskać pozytywną odpowiedź
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. Zasymulowanie działania użytkownika (np. kliknięcie w przycisk captchy)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// Przykład wywołania weryfikacji:
try {
await page.click('.geetest_btn'); // przycisk captchy
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// Czasami verify() trzeba wywołać ręcznie:
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // zamień na stronę z GeeTest v4
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. Zarejestruj się lub zaloguj na swoje konto GeeTest.
2. Przejdź do Captcha Dashboard i wybierz Behavior Verification v4:

3. W panelu kliknij + Create application.
4. Podaj APP/website name (nazwa strony lub aplikacji, gdzie będzie używana captcha), Address (główna domena strony, na której captcha zostanie umieszczona, np. https://example.com), Industry (kategoria strony, np. „E-commerce”, „Social Media” itp.), a następnie kliknij Confirm.
5. Kliknij Add events obok nazwy nowo utworzonej aplikacji. Ustaw Event – nazwę konkretnego scenariusza (zdarzenia), w którym captcha będzie używana, np. login, register itp.; Device – platformę (np. Web/Wap); Business types – typ scenariusza użycia captchy (np. Sign-up / Sign-in — rejestracja / logowanie). Następnie kliknij Add.
6. W panelu pojawią się teraz ID (używane po stronie klienta i serwera) oraz Key (używany po stronie serwera do weryfikacji) utworzonej captchy:

7. Podłącz część kliencką
Dołącz skrypt:
<script src="https://static.geetest.com/v4/gt4.js"></script>Zainicjalizuj CAPTCHA:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // wstawiamy do elementu na stronie
}
);Ważne:
<!-- Dołączamy skrypt CAPTCHA -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- Kontener dla CAPTCHA -->
<div id="captcha"></div>
<script>
// Inicjalizacja CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // zamień na własne CaptchaId
},
function (captcha) {
// Wstawiamy CAPTCHA do elementu strony
captcha.appendTo("#captcha");
// Tutaj można obsłużyć pomyślne przejście
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// W tym miejscu można wysłać validate na serwer w celu weryfikacji
});
}
);
</script>
8. Skonfiguruj część serwerową.
Gdy użytkownik przechodzi CAPTCHA po stronie frontendu, generowany jest zestaw parametrów. Należy przesłać je do backendu i zweryfikować poprzez wtórne API GeeTest, aby potwierdzić, że sprawdzenie zakończyło się pomyślnie.
Wtórne API weryfikacji:
http://gcaptcha4.geetest.com/validateGłówne parametry żądania
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// Odbieramy parametry z frontendu
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// Generujemy podpis (sign_token)
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// Budujemy dane żądania
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// Żądanie do wtórnego API weryfikacyjnego
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
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 v4 wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować GeeTest CAPTCHA v4 oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.