logo
bars

GeeTest CAPTCHA v3
i CapMonster Cloud

Rozwiązywanie captchy, instalacja na stronie i testowanie.
Odziedziczyłeś stronę z już wdrożoną captchą lub ochroną, ale bez dostępu do kodu źródłowego? Naturalnie pojawia się pytanie, jaka technologia jest używana, czy działa poprawnie i jak ją przetestować.

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.

Czym jest GeeTest CAPTCHA v3
Czym jest GeeTest CAPTCHA v3

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.

Background
Przykłady GeeTest CAPTCHA v3
Intelligent mode
Intelligent mode
Weryfikacja użytkownika odbywa się głównie na podstawie jego zachowania i interakcji ze stroną, bez konieczności wykonywania dodatkowych zadań.
Slide CAPTCHA
Slide CAPTCHA
Suwak, który należy przesunąć, aby ułożyć puzzle lub dopasować element obrazu.
Icon CAPTCHA
Icon CAPTCHA
Wybór obrazów we wskazanej kolejności.
Space CAPTCHA
Space CAPTCHA
Przesunięcie figury w odpowiednie miejsce na obrazie.

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:

Tworzenie zadaniaTworzenie zadania
arrow
Wysyłanie żądania APIWysyłanie żądania API
arrow
Odebranie wynikuOdebranie wyniku
arrow
Umieszczenie tokenu na stronieUmieszczenie tokenu na stronie
arrow
Rozpoznawanie GeeTest CAPTCHA v3 z użyciem gotowych bibliotek
Usługa CapMonster Cloud udostępnia gotowe biblioteki do wygodnej pracy w językach Python, JavaScript (Node.js) i C#.
Python
JavaScript
C#
Rozwiązanie, podstawienie tokenu i wysłanie formularza
Przykład w Node.js dla pełnego cyklu rozpoznawania captchy na Twojej stronie. Możliwe podejścia: użyć żądań HTTP do pobrania HTML i parametrów captchy, wysłać odpowiedź i przetworzyć wynik; albo skorzystać z narzędzi automatyzacji (np. Playwright), aby otworzyć stronę, poczekać na załadowanie captchy, wysłać parametry (do testów możesz wysyłać zarówno poprawne, jak i błędne dane), otrzymać rozwiązanie za pomocą klienta CapMonster Cloud, podstawić token do formularza i zobaczyć rezultat.
// 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();
})();
Jak podłączyć GeeTest CAPTCHA v3 do swojej strony
Aby dobrze rozumieć działanie captchy na Twojej stronie, logikę jej weryfikacji oraz móc ją ponownie podłączyć lub przekonfigurować, zalecamy zapoznanie się z tym rozdziałem. Opisuje on proces wdrożenia ochrony — dzięki temu szybko poznasz wszystkie istotne szczegóły.

1. Zarejestruj się lub zaloguj do swojego konta GeeTest.

2. Przejdź do Captcha Dashboard i wybierz CAPTCHA v3:

HowTo Connect image 1

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.

HowTo Connect image 2

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).

Background
Możliwe błędy i debugowanie
Bug Icon
Nieprawidłowe parametry
Captcha nie wyświetla się lub zwraca błąd invalid-gt / invalid-challenge. Sprawdź, czy używane są aktualne wartości gt i challenge dla Twojej strony.
Bug Icon
Przekroczony czas oczekiwania
rozwiązanie captchy nie zostało otrzymane na czas. Zwiększ czas oczekiwania, gdy korzystasz z usług automatycznego rozwiązywania (np. CapMonster).
Bug Icon
Puste pola
challenge, validate lub seccode nie zostały przekazane na stronę. Upewnij się, że są poprawnie wstawiane do ukrytych pól formularza.
Bug Icon
Odpowiedź success=false
token wygasł, został użyty ponownie albo jest sfałszowany. W celach diagnostycznych włącz logowanie żądań i sprawdzaj pola zwracane przez serwer (np. error-codes przy pracy z CapMonster lub Twoim serwerem weryfikacji).
Sprawdzenie odporności ochrony
Po integracji upewnij się, że system faktycznie chroni stronę przed automatycznymi działaniami.
Rekomendacje dotyczące bezpieczeństwa i optymalizacji
Przechowuj <b>klucz captchy (sekretny KEY) wyłącznie po stronie serwera</b> i nie przekazuj go do części klienckiej.
Loguj kody błędów podczas weryfikacji (np. <b>error-codes</b> lub inne pola odpowiedzi serwera), aby rozumieć przyczyny nieudanych sprawdzeń.
Dodaj na dole formularza linki do <b>Polityki prywatności</b> i <b>Warunków korzystania z GeeTest</b>, jeśli jest to wymagane przez licencję lub wewnętrzne regulacje.
Wnioski

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.

Conclusion
Przydatne linki
DocIconDokumentacja GeeTest v3DocIconDokumentacja CapMonster Cloud (praca z GeeTest v3)DocIconUtworzenie konta w GeeTestDocIconUtworzenie konta w CapMonster Cloud