GeeTest CAPTCHA logo GeeTest демо

Работает через JS-инициализацию initGeetest(). После прохождения возвращаются challenge-данные (challenge, validate, seccode), которые нужно отправить на сервер для валидации.

Captcha example

GeeTest — это тип капчи, при которой нужно перетащить кусочек пазла или выбрать изображения в заданном порядке, чтобы подтвердить, что действие выполняет человек. В итоге защита усложняет автоматизацию и значительно замедляет тестирование.

Как обходить GeeTest

Найдите следующие параметры GeeTest на странице (обычно их можно найти внутри функции initGeetest):

gt - публичный ключ сайта (статический)

challenge - динамический ключ задания

api_server - домен API (обязателен для некоторых сайтов)

ВАЖНО: для каждого запроса к нашему API необходимо получать новое значение challenge. Если капча уже была загружена на странице, то значение challenge является недействительным. Вам необходимо изучить запросы, которые выполняются при загрузке страницы и найти тот, в котором возвращается значение challenge. Затем, для получения нового challenge вам нужно каждый раз выполнять данный запрос и парсить его.

Отправьте эти параметры на наш API.

Используя SDK (рекомендовано):

PHP
    // https://github.com/solvercaptcha/solvecaptcha-php
    
    require(__DIR__ . '/../src/autoloader.php');

    $solver = new \SolveCaptcha\SolveCaptcha('YOUR_API_KEY');

    try {
        $result = $solver->geetest([
        'gt'        => '81388ea1fc187e0c335c0a8907ff2625',
        'apiServer' => 'api.geetest.com',
        'challenge' => '12345678abc90123d45678ef90123a456b',
        'url'       => 'https://solvecaptcha.com/demo/geetest',
    ]);
    } catch (\Exception $e) {
        die($e->getMessage());
    }

    die('Captcha solved: ' . $result->code);
Python
    // https://github.com/solvercaptcha/solvecaptcha-python
    
    import sys
    import os

    sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

    from solvecaptcha import SolveCaptcha

    api_key = os.getenv('APIKEY_solvecaptcha', 'YOUR_API_KEY')

    solver = SolveCaptcha(api_key)

    resp = requests.get("http://solvecaptcha.com/demo/geetest")
    challenge = resp.content.decode('utf-8').split(';')[0]

    try:
        result = solver.geetest(gt='f3bf6dbdcf7886856696502e1d55e00c',
        apiServer='api.geetest.com',
        challenge=challenge,
        url='https://solvecaptcha.com/demo/geetest')

    except Exception as e:
        sys.exit(e)

    else:
        sys.exit('solved: ' + str(result))
Java
    // https://github.com/solvercaptcha/solvecaptcha-java
    
    package examples;

    import com.solvecaptcha.SolveCaptcha;
    import com.solvecaptcha.captcha.GeeTest;

    public class GeeTestExample {
        public static void main(String[] args) {
            SolveCaptcha solver = new SolveCaptcha("YOUR_API_KEY");
            GeeTest captcha = new GeeTest();
            captcha.setGt("81388ea1fc187e0c335c0a8907ff2625");
            captcha.setApiServer("api.geetest.com");
            captcha.setChallenge("12345678abc90123d45678ef90123a456b");
            captcha.setUrl("https://solvecaptcha.com/demo/geetest");
            try {
                solver.solve(captcha);
                System.out.println("Captcha solved: " + captcha.getCode());
            } catch (Exception e) {
                System.out.println("Error occurred: " + e.getMessage());
            }
        }
    }
C#
    // https://github.com/solvercaptcha/solvecaptcha-csharp
    
    using System;
    using System.Linq;
    using SolveCaptcha.Captcha;

    namespace SolveCaptcha.Examples
    {
        public class GeeTestExample
        {
            public void Main()
            {
                SolveCaptcha solver = new SolveCaptcha("YOUR_API_KEY");
                GeeTest captcha = new GeeTest();
                captcha.SetGt("81388ea1fc187e0c335c0a8907ff2625");
                captcha.SetApiServer("api.geetest.com");
                captcha.SetChallenge("12345678abc90123d45678ef90123a456b");
                captcha.SetUrl("https://solvecaptcha.com/demo/geetest");
                try
                {
                    solver.Solve(captcha).Wait();
                    Console.WriteLine("Captcha solved: " + captcha.Code);
                }
                catch (AggregateException e)
                {
                    Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message);
                }
            }
        }
    }
Go
    // https://github.com/solvercaptcha/solvecaptcha-go
    
    package main

    import (
        "fmt"
        "log"
        "github.com/solvecaptcha/solvecaptcha-go"
    )

    func main() {
        client := apisolvecaptcha.NewClient("API_KEY")
        captcha := apisolvecaptcha.GeeTest{
            GT: "81388ea1fc187e0c335c0a8907ff2625",
            ApiServer: "api.geetest.com",
            Challenge: "12345678abc90123d45678ef90123a456b",
            Url: "https://solvecaptcha.com/demo/geetest",
        }
        code, err := client.Solve(captcha.ToRequest())
        if err != nil {
            log.Fatal(err);
        }
        fmt.Println("code "+code)
    }
C++
    // https://github.com/solvercaptcha/solvecaptcha-cpp
    
    #include <cstdio>

    #include "curl_http.hpp"
    #include "apisolvecaptcha.hpp"

    int main (int ac, char ** av)
    {
    apisolvecaptcha::curl_http_t http;
    http.set_verbose (true);

    apisolvecaptcha::client_t client;
    client.set_http_client (&http);
    client.set_api_key (API_KEY);

    apisolvecaptcha::geetest_t cap;
    cap.set_gt ("81388ea1fc187e0c335c0a8907ff2625");
    cap.set_api_server ("api.geetest.com");
    cap.set_challenge ("12345678abc90123d45678ef90123a456b");
    cap.set_url ("https://solvecaptcha.com/demo/geetest");

    try
    {
        client.solve (cap);
        printf ("code '%s'\n", cap.code ().c_str ());
    }
    catch (std::exception & e)
    {
        fprintf (stderr, "Failed: %s\n", e.what ());
    }

    return 0;   
    }
Ruby
    // https://github.com/solvercaptcha/solvecaptcha-ruby
    
    require 'api_solvecaptcha'

    client =  ApiSolveCaptcha.new("YOUR_API_KEY")

    result = client.geetest({
        gt: 'f1ab2cdefa3456789012345b6c78d90e',
        api_server: 'api-na.geetest.com',
        challenge: '12345678abc90123d45678ef90123a456b',
        pageurl: 'https://www.site.com/page/'
    })

Вручную:

Отправьте GET или POST запрос на наш API URL: https://solvecaptcha.com/in.php с параметрами из предыдущего шага. Пример запроса:

  https://solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=geetest&gt=929c4274113891610f91fecd8f98f84a&challenge=12345678abc90123d45678ef90123a456b&api_server=api-na.geetest.com&pageurl=http://solvecaptcha.com/demo/geetest

Если вы отправили корректный запрос, сервер вернёт ID вашей капчи:

  OK|2122988149

В противном случае сервер вернет ошибку. Через 15-20 секунд отправьте GET запрос чтобы получить результат:

  GET https://solvecaptcha.com/res.php?key=YOUR_API_KEY&action=get&id=2122988149

Если ваша капча уже решена, сервер вернёт ответ на неё.

Если ваша капча ещё не решена, сервер вернёт CAPCHA_NOT_READY. В таком случае повторите ваш запрос через 5 секунд. Если что-то пошло не так, сервер вернёт ошибку.

Если капча уже решена, сервер вернёт ответ в формате JSON. Ответ содержит три параметра: challenge, validate и seccode:

  {
    "challenge": "1a2b3456cd67890e12345fab678901c2de",
    "validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
    "seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
  }

Используйте значения, полученные в ответе от нашего API в запросе к сайту, передавая их в соотстветствующих полях запроса:

  geetest_challenge
  geetest_validate
  geetest_seccode

Нажмите кнопку "Проверить".