GeeTest CAPTCHA v4
i CapMonster Cloud

Rozwiązywanie captchy, integracja na stronie i testowanie.

Cennik rozwiązania GeeTest CAPTCHA v4

CAPTCHA
Cena (USD)
$ 1.20
1000 tokenów
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 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.

Czym jest GeeTest CAPTCHA v4
Czym jest GeeTest CAPTCHA v4
GeeTest CAPTCHA v4 (Adaptive CAPTCHA/Behavior Verification) to nowocześniejsza wersja w porównaniu z v3, zaprojektowana do ochrony stron internetowych przed zautomatyzowanymi działaniami, które mogą zaszkodzić serwisowi. System śledzi zachowanie użytkownika oraz parametry jego urządzenia i na tej podstawie dobiera odpowiedni rodzaj zadania: dla prawdziwego użytkownika weryfikacja będzie maksymalnie prosta — często wystarczy jedno kliknięcie w widżet captchy, natomiast przy podejrzeniu automatyzacji użytkownik otrzymuje bardziej złożone zadanie, które musi poprawnie wykonać.
Background
Przykłady GeeTest CAPTCHA v4
No CAPTCHA
No CAPTCHA
Weryfikacja użytkownika odbywa się głównie na podstawie jego zachowania oraz interakcji ze stroną, bez konieczności wykonywania klasycznych zadań testowych.
Icon CAPTCHA
Icon CAPTCHA
Wybór obrazków we wskazanej kolejności.
IconCrush CAPTCHA
IconCrush CAPTCHA
Zamiana elementów miejscami tak, aby w jednej linii ustawić trzy takie same ikony (jak w łamigłówkach typu „dopasuj 3”).
Slide CAPTCHA
Slide CAPTCHA
Suwak (slider) do ułożenia puzzla lub dopasowania elementów obrazu.
Gobang CAPTCHA
Gobang CAPTCHA
Suwak (slider) do ułożenia puzzla lub dopasowania elementów obrazu.

Jak rozwiązać GeeTest CAPTCHA v4 za pomocą CapMonster Cloud

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.

  • 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 v4 z użyciem gotowych bibliotek
Usługa CapMonster Cloud udostępnia gotowe biblioteki ułatwiające pracę z językami Python, JavaScript (Node.js) oraz C#.
Python
JavaScript
C#
Rozwiązanie, wstawienie tokena i wysłanie formularza
Przykład w Node.js, pokazujący pełny cykl rozwiązywania captchy na Twojej stronie. Możliwe podejścia: użycie żądań HTTP do pobrania HTML i parametrów captchy, wysłanie odpowiedzi oraz przetworzenie wyniku; lub użycie narzędzi automatyzujących (np. Playwright), aby otworzyć stronę, poczekać na załadowanie captchy, wysłać parametry (w testach możesz wysyłać zarówno poprawne, jak i błędne dane), pobrać rozwiązanie przez klienta CapMonster Cloud, wstawić token do formularza i zaobserwować rezultat.
python
// 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);
})();
Jak podłączyć GeeTest CAPTCHA v4 do swojej strony
Aby dobrze zrozumieć działanie captchy na Twojej stronie, logikę weryfikacji oraz sposób ponownej integracji lub rekonfiguracji, warto zapoznać się z tym rozdziałem. Opisuje on proces włączania ochrony i pomoże szybko ogarnąć wszystkie szczegóły.

1. Zarejestruj się lub zaloguj na swoje konto GeeTest.

2. Przejdź do Captcha Dashboard i wybierz Behavior Verification v4:

HowTo Connect image 1

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:

HowTo Connect image 2

7. Podłącz część kliencką

Dołącz skrypt:

markup
<script src="https://static.geetest.com/v4/gt4.js"></script>

Zainicjalizuj CAPTCHA:

javascript
initGeetest4(
  { captchaId: "Your CaptchaId" },
  function (captcha) {
    captcha.appendTo("#captcha"); // wstawiamy do elementu na stronie
  }
);

Ważne:

  • CAPTCHA musi być inicjalizowana przy ładowaniu strony, w przeciwnym razie nie będzie w stanie śledzić zachowania użytkownika.
  • Jeśli na jednej stronie używasz kilku CAPTCHA, wywołuj initGeetest4 osobno dla każdej z nich.
  • Jeżeli używasz CAPTCHA wewnątrz iframe, dodaj atrybut sandbox="allow-scripts allow-popups".

Przykładowy kodPrzykładowy kod
arrow

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:

javascript
url
http://gcaptcha4.geetest.com/validate

  • Metoda: GET/POST
  • Content-Type: application/x-www-form-urlencoded
  • Odpowiedź: JSON

Główne parametry żądania

  • lot_number – numer seryjny weryfikacji
  • captcha_output – dane weryfikacyjne
  • pass_token – token weryfikacji
  • gen_time – czas wygenerowania weryfikacji
  • captcha_id – ID captchy
  • sign_token – podpis używany do weryfikacji

Przykład poprawnej odpowiedziPrzykład poprawnej odpowiedzi
arrow

Przykład weryfikacji CAPTCHA w PHPPrzykład weryfikacji CAPTCHA w PHP
arrow

Background
Możliwe błędy i debugowanie
Bug Icon
Nieprawidłowe parametry
Captcha nie wyświetla się lub zwraca błędy, takie jak invalid-captcha-id / invalid-challenge. Upewnij się, że używasz aktualnych wartości captcha_id i challenge, zgodnych z daną stroną. Parametry te są dynamicznie generowane przy każdym żądaniu /load.
Bug Icon
Przekroczony czas oczekiwania
Wynik rozwiązania captchy nie został odebrany na czas. Zwiększ czas oczekiwania (timeout) podczas korzystania z automatycznych serwisów rozwiązywania (np. CapMonster Cloud) i upewnij się, że połączenie z API jest stabilne.
Bug Icon
Puste pola
Pola captcha_output, pass_token lub lot_number nie zostały przekazane na stronę lub w żądaniu weryfikacyjnym. Sprawdź, czy wartości te są poprawnie wstawiane do ukrytych pól formularza lub do body żądania wysyłanego do Twojego serwera.
Bug Icon
Odpowiedź success=false
Token jest przeterminowany, został użyty ponownie lub jest sfałszowany. Włącz logowanie wszystkich żądań i odpowiedzi z serwera weryfikacyjnego, aby móc śledzić pola takie jak error_code czy error_msg.
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 <span class="font-bold">klucz captchy (tajny KEY) wyłącznie po stronie serwera</span> i nigdy nie udostępniaj go w części klienckiej.
Loguj kody błędów podczas weryfikacji (<span class="font-bold">error-codes</span> lub odpowiednie pola zwracane przez serwer), aby rozumieć przyczyny nieudanych sprawdzeń.
Dodaj na dole formularza linki do <span class="font-bold">Polityki prywatności</span> oraz <span class="font-bold">Warunków korzystania z GeeTest</span>, jeśli wymagają tego licencja 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 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.

Conclusion

Najczęściej zadawane pytania o GeeTest CAPTCHA v4

CapMonster Cloud domyślnie używa standardowych endpointów GeeTest. Dołącz parametr geetestApiServerSubdomain w treści żądania GeeTestTask tylko wtedy, gdy docelowa strona używa własnego endpointu API do ładowania widżetu. Aby to wykryć, sprawdź ruch sieciowy strony: jeśli żądania inicjalizacji trafiają na niestandardowy host inny niż api.geetest.com, przekaż tę wartość subdomeny w parametrze.

riskType informuje solver, jakiego typu interakcji się spodziewać — slide, icon, gobang i inne tryby specyficzne dla challenge. Dla standardowego slider challenge ustaw "riskType": "slide" w ładunku żądania createTask. Na przykład:

POST https://api.capmonster.cloud/createTask

json
{
  "clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
  "task": {
    "type": "GeeTestTask",
    "websiteURL": "https://gt4.geetest.com/",
    "gt": "54088bb07d2df3c46b79f80300b0abbe",
    "version": 4,
    "initParameters": {
      "riskType": "slide"
    }
  }
}

Bez tego solver może próbować niewłaściwego typu interakcji i zwrócić nieprawidłowy token.

CapMonster Cloud udostępnia oficjalne SDK dla Python, Node.js i C#. Każde SDK wewnętrznie obsługuje tworzenie zadań, odpytywanie rozwiązania CAPTCHA, logikę ponowień i zarządzanie timeoutami. Korzystanie z tych SDK to najszybsza droga od klucza API do działającego solvera.

Po rozwiązaniu CapMonster Cloud zwraca cztery wartości do przekazania na endpoint /verify strony:

  • captcha_output — zakodowane dane rozwiązania
  • pass_token — token weryfikacyjny
  • lot_number — numer seryjny weryfikacji
  • gen_time — znacznik czasu wygenerowanego rozwiązania

Połącz je z captcha_id użytym przy tworzeniu zadania rozwiązania i przekaż te wartości do /verify, aby uzyskać pomyślną odpowiedź.

Wyodrębnij parametry inicjalizacji GeeTest, przechwytując ruch sieciowy podczas ładowania strony. W Playwright nasłuchuj odpowiedzi strony i filtruj endpoint /load na gcaptcha4.geetest.com. Przeanalizuj query string URL, aby wyodrębnić captcha_id i risk_type. Minimalny przykład Playwright w Pythonie:

python
async def on_request(request):
    url = request.url
    if "https://gcaptcha4.geetest.com/load?" in url:
        query = parse_qs(urlparse(url).query)
        captcha_id = query.get("captcha_id", [None])[0]
        risk_type = query.get("risk_type", [None])[0]

        if captcha_id and not result["version"]:
            result["version"] = "v4"
            result["data"] = {
                "captchaId": captcha_id,
                "riskType": risk_type
            }

            print("GeeTest v4 detected:")
            print(result["data"])

Przekaż wyodrębnione captcha_id jako parametr gt oraz riskType i version bezpośrednio do ładunku GeeTestTask. Pełny schemat API znajdziesz w dokumentacji.