Распознавание GeeTest Captcha

GeeTest - это такой вид капчи, где требуется передвинуть кусок пазла или выбрать несколько объектов в нужном порядке. Чем-то похожа на KeyCaptcha, но имеет другой метод решения

Начать сейчас

Статистика обычных капч

YouTube's thumbnail image for the video.

Как распознать GeeTest

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

gt - публичный ключ сайта (статический)
challenge - динамический ключ задания
api_server - домен API (обязателен для некоторых сайтов)

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

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

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

{
  "challenge": "1a2b3456cd67890e12345fab678901c2de",
  "validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
  "seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}
  1. Используйте значения, полученные в ответе от нашего API в запросе к сайту, передавая их в соотстветствующих полях запроса:
geetest_challenge
geetest_validate
geetest_seccode
  1. Нажмите кнопку "Проверить".

PHP

// https://github.com/2captcha/2captcha-php

require(__DIR__ . '/../src/autoloader.php');

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

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

die('Captcha solved: ' . $result->code);

Java

// https://github.com/2captcha/2captcha-java

package examples;

import com.twocaptcha.TwoCaptcha;
import com.twocaptcha.captcha.GeeTest;

public class GeeTestExample {

    public static void main(String[] args) {
        TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");

        GeeTest captcha = new GeeTest();
        captcha.setGt("f2ae6cadcf7886856696502e1d55e00c");
        captcha.setApiServer("api.geetest.com");
        captcha.setChallenge("12345678abc90123d45678ef90123a456b");
        captcha.setUrl("https://2captcha.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/2captcha/2captcha-csharp

using System;
using System.Linq;
using TwoCaptcha.Captcha;

namespace TwoCaptcha.Examples
{
    public class GeeTestExample
    {
        public void Main()
        {
            TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");

            GeeTest captcha = new GeeTest();
            captcha.SetGt("f2ae6cadcf7886856696502e1d55e00c");
            captcha.SetApiServer("api.geetest.com");
            captcha.SetChallenge("12345678abc90123d45678ef90123a456b");
            captcha.SetUrl("https://2captcha.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);
            }
        }
    }
}

Python

# https://github.com/2captcha/2captcha-python

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

from twocaptcha import TwoCaptcha

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

solver = TwoCaptcha(api_key)

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

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

except Exception as e:
    sys.exit(e)

else:
    sys.exit('solved: ' + str(result))

Go

// https://github.com/2captcha/2captcha-go

package main

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

func main() {
    client := api2captcha.NewClient("API_KEY")
    cap := api2captcha.GeeTest{
        GT: "f2ae6cadcf7886856696502e1d55e00c",
        ApiServer: "api.geetest.com",
        Challenge: "12345678abc90123d45678ef90123a456b",
        Url: "https://2captcha.com/demo/geetest",
    }
    code, err := client.Solve(cap.ToRequest())
    if err != nil {
        log.Fatal(err);
    }
    fmt.Println("code "+code)
}

C++

// https://github.com/2captcha/2captcha-cpp

#include <cstdio>

#include "curl_http.hpp"
#include "api2captcha.hpp"

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

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

api2captcha::geetest_t cap;
cap.set_gt ("f2ae6cadcf7886856696502e1d55e00c");
cap.set_api_server ("api.geetest.com");
cap.set_challenge ("12345678abc90123d45678ef90123a456b");
cap.set_url ("https://2captcha.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;   
}

GithubПолная документация и код примеровПодробнее на ruCaptcha API

Стоимость решения

Стоимость распознавания очень низка, от RUB 0.16 за одну капчу. Для удобства, все цены указывается за распознавание 1000 капч, но биллинг в системе происходит отдельно по каждой капче. Разные типы капч распознаются по разной цене.

RUB 44.00

За 1000 обычных капч

Поддерживаемые капчи

Процесс решения обычной капчи заключается в следующем: мы забираем изображение капчи со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ, который необходимо ввести в соответствующее поле для решения капчи

API демонстрацияКак решить

Процесс решения текстовой капчи заключается в следующем: мы забираем текстовый вопрос капчи со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ, который необходимо ввести в соответствующее поле для решения капчи

API демонстрацияКак решить

Процесс решения заключается в следующем: мы забираем изображение капчи со страницы ее размещения и инструкцию, по каким картинкам необходимо кликать и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде набора координат точек на изображении, по которым необходимо кликнуть для решения капчи

API демонстрацияКак решить

Процесс решения Rotate Captcha заключается в следующем: мы забираем изображение капчи со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде значения угла поворота изображения, на который необходимо повернуть изображение для решения капчи

API демонстрацияКак решить

Процесс решения reCAPTCHA V2 заключается в следующем: мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey и адреса страницы размещения капчи и передаем их в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи

API демонстрацияКак решить

Процесс решения reCAPTCHA V2 Callback не отличается от аналогичного процесса решения ReCaptcha V2: мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey и адреса страницы размещения капчи и передаем их в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи. Иногда вы не найдете кнопки, отправляющей форму. Вместо нее может использоваться callback-функция. Эта функция выполняется, когда капча распознана. Обычно callback-функция определена в параметре data-callback или как параметр callback у функции grecaptcha.render

API демонстрацияКак решить

Процесс решения невидимой капчи reCAPTCHA V2 Invisible аналогичен распознаванию reCAPTCHA V2 и заключается в следующем: мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey и адреса страницы размещения капчи и передаем их в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи

API демонстрацияКак решить

Процесс решения ReCaptcha Enterprise заключается в следующем: определяем тип reCaptcha, он может быть V2 или V3, после чего мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey и адреса страницы размещения капчи и передаем их в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи

Как решить

Процесс решения reCAPTCHA V3 следующий: мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey, параметра action и адреса страницы размещения капчи и передаем их в сервис ruCaptcha, где ее решает работник с соответствующим рейтингом “человечности”, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи. Во многом новый вид капчи похож на reCAPTCHA V2, т.е. основной принцип остался тем же - пользователь получает от API ruCaptcha токен, который отправляется в POST-запросе к сайту, а сайт верифицирует токен через API reCAPTCHA

API демонстрацияКак решить

Процесс решения KeyCaptcha заключается в следующем: мы забираем набор необходимых параметров со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде набора уже других параметров, который необходимо передать в соответствующие поля для решения капчи

API демонстрацияКак решить

Процесс решения GeeTest Captcha заключается в следующем: мы забираем набор необходимых параметров со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде набора уже других параметров, который необходимо передать в соответствующие поля для решения капчи

API демонстрация

Процесс решения заключается в следующем: мы забираем параметры капчи, необходимые для ее решения в виде параметра data-sitekey и адреса страницы размещения капчи ruCaptcha и передаем их в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде токена, который необходимо ввести в соответствующее поле для решения капчи

API демонстрацияКак решить

Процесс решения FunCaptcha Arkose Labs заключается в следующем: мы забираем набор необходимых параметров со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде набора уже других параметров, который необходимо передать в соответствующие поля для решения капчи

Как решить

Процесс решения Capy Puzzle Captcha заключается в следующем: мы забираем набор необходимых параметров со страницы ее размещения и передаем в сервис ruCaptcha, где ее решает работник, после чего нам возвращается ответ в виде набора уже других параметров, который необходимо передать в соответствующие поля для решения капчи

Как решить

Процесс решения TikTok Captcha основан на cookies, которые нужно использовать не позднее трех секунд после решения капчи нашими работниками. Необходимо собрать все cookies со страницы, где размещена капча, передать в сервис ruCaptcha, где произойдет решение, а полученный в ответ набор cookies применить перед совершением действия, защищенного капчей на странице размещения капчи

Как решить