GeeTest · Живое демо

Демо GeeTest v3

Головоломка от GeeTest: передвиньте фрагмент пазла на нужное место.

  • Бесплатно, без регистрации
  • Виджет реального провайдера
  • Посмотреть ответ проверки

Живой виджет GeeTest v3

Нажмите на полосу, затем передвиньте фрагмент пазла на место. Проверка происходит, как только GeeTest возвращает значения challenge, validate и seccode.

Как решить GeeTest v3

Поле выше — это живая GeeTest v3 задание — головоломка «сдвинь, чтобы совместить». На этой странице показаны три простых способа решить GeeTest v3 и получить три возвращаемых им значения, geetest_challenge, geetest_validate и geetest_seccode: автоматически с помощью расширения CapSkip для браузера, в вашем собственном коде с помощью SDK CapSkip или перенаправив на CapSkip сервис капчи, к которому уже обращаются ваши инструменты. CapSkip работает локально на вашем устройстве, поэтому нет платы за каждое решение и ничего не покидает ваш компьютер.

Код не нужен

Вариант 1: решение GeeTest v3 с помощью браузерного расширения

Самый простой способ обойти GeeTest v3 — Расширение CapSkip для распознавания капчи для Chrome и Firefox. Оно находит пропуск в пазле, перетаскивает элемент на место человекоподобным движением и передаёт сайту действительный seccode — без написания кода.

1

Установите расширение

Добавьте CapSkip из Chrome Web Store или Firefox Add-ons. Он также работает в Brave, Edge, Opera и Vivaldi.

2

Запустите приложение CapSkip

Установите и откройте десктопное приложение CapSkip. Оно выполняет распознавание на вашем устройстве и работает в паре с расширением.

3

Решает автоматически

Перезагрузите эту страницу — и CapSkip сам вставит кусочек пазла в нужное место. Предпочитаете сохранять контроль? Переключитесь в ручной режим в любой момент.

Для разработчиков

Вариант 2: решение GeeTest v3 с помощью CapSkip SDK

Создаёте автоматизацию, парсер или бота? Используйте SDK для распознавания капчи CapSkip чтобы решать GeeTest v3 из Python, Node.js, PHP или C#. Вы передаёте этой страницы gt, свежий challenge и URL страницы, и CapSkip возвращает решённые значения challenge, validate и seccode, которые вы можете отправить как настоящие.

Captcha ID (gt)
e3a600a044ef0ad51749da5c451adca0
URL страницы
https://capskip.com/ru/captcha-demo/geetest-v3/

Прежде чем начать

CapSkip решает капчу локально. Скачайте и запустите Десктопное приложение CapSkip и держите его открытым в фоновом режиме. SDK обращается к нему по 127.0.0.1:8080, поэтому нет обращений к облаку и нет платы за каждое решение.

challenge истекает

В отличие от site key у reCAPTCHA, для GeeTest v3 нужны два значения. gt выше статично и никогда не меняется, но challenge одноразовый и умирает примерно через минуту, и он сгорает в тот момент, когда виджет его загружает. Получайте свежий непосредственно перед каждым решением — именно это и делает шаг 2.

1

Установите SDK

Добавьте официальный клиент CapSkip в свой проект.

pip install capskip
npm install capskip
composer require capskip/capskip
dotnet add package CapSkip
2

Получите свежие gt и challenge

Эта страница регистрирует свой challenge GeeTest на стороне сервера и выводит нужный ей nonce во встроенном capskipCaptcha объект. Прочитайте его, затем запросите у страницы собственное задание, чтобы то, которое использует виджет, осталось нетронутым.

import json, re, requests

PAGE = "https://capskip.com/ru/captcha-demo/geetest-v3/"
AJAX = "https://capskip.com/wp-admin/admin-ajax.php"

session = requests.Session()
html = session.get(PAGE).text

# The page prints its ajax nonce and page id in an inline capskipCaptcha object
cfg = json.loads(re.search(r"capskipCaptcha\s*=\s*(\{.*\});", html).group(1))

# Register a fresh challenge (single use, expires in about a minute)
data = session.post(AJAX, data={
    "action": "capskip_geetest_register",
    "nonce": cfg["nonce"],
    "post_id": cfg["postId"],
}).json()["data"]

gt, challenge = data["gt"], data["challenge"]
print(gt, challenge)
const PAGE = 'https://capskip.com/ru/captcha-demo/geetest-v3/';
const AJAX = 'https://capskip.com/wp-admin/admin-ajax.php';

const html = await (await fetch(PAGE)).text();

// The page prints its ajax nonce and page id in an inline capskipCaptcha object
const cfg = JSON.parse(html.match(/capskipCaptcha\s*=\s*(\{.*\});/)[1]);

// Register a fresh challenge (single use, expires in about a minute)
const res = await fetch(AJAX, {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    action: 'capskip_geetest_register',
    nonce: cfg.nonce,
    post_id: cfg.postId,
  }),
});

const { gt, challenge } = (await res.json()).data;
console.log(gt, challenge);
<?php
$page = 'https://capskip.com/ru/captcha-demo/geetest-v3/';
$ajax = 'https://capskip.com/wp-admin/admin-ajax.php';

$html = file_get_contents($page);

// The page prints its ajax nonce and page id in an inline capskipCaptcha object
preg_match('/capskipCaptcha\s*=\s*(\{.*\});/', $html, $m);
$cfg = json_decode($m[1], true);

// Register a fresh challenge (single use, expires in about a minute)
$res = file_get_contents($ajax, false, stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query([
            'action'  => 'capskip_geetest_register',
            'nonce'   => $cfg['nonce'],
            'post_id' => $cfg['postId'],
        ]),
    ],
]));

$data = json_decode($res, true)['data'];
$gt = $data['gt'];
$challenge = $data['challenge'];
echo $gt, ' ', $challenge;
using System.Text.Json.Nodes;
using System.Text.RegularExpressions;

const string Page = "https://capskip.com/ru/captcha-demo/geetest-v3/";
const string Ajax = "https://capskip.com/wp-admin/admin-ajax.php";

var http = new HttpClient();
var html = await http.GetStringAsync(Page);

// The page prints its ajax nonce and page id in an inline capskipCaptcha object
var cfg = JsonNode.Parse(Regex.Match(html, @"capskipCaptcha\s*=\s*(\{.*\});").Groups[1].Value)!;

// Register a fresh challenge (single use, expires in about a minute)
var form = new FormUrlEncodedContent(new Dictionary<string, string> {
    ["action"] = "capskip_geetest_register",
    ["nonce"] = cfg["nonce"]!.ToString(),
    ["post_id"] = cfg["postId"]!.ToString(),
});
var res = await http.PostAsync(Ajax, form);
var data = JsonNode.Parse(await res.Content.ReadAsStringAsync())!["data"]!;

string gt = data["gt"]!.ToString();
string challenge = data["challenge"]!.ToString();
Console.WriteLine($"{gt} {challenge}");

Вы получаете со страницы её gt плюс новый 32-символьный challenge. Решите её сразу же.

3

Решите GeeTest v3 и получите три значения

Передайте gt, challenge который вы только что зарегистрировали, и этой страницы url в geetest(). CapSkip перетаскивает элемент пазла в прорезь и возвращает решённый triplet.

from capskip import CapSkip

# Connect to the CapSkip app running on your machine
solver = CapSkip(host="127.0.0.1", port=8080)

# Solve the GeeTest v3 slider on this page
result = solver.geetest(
    gt=gt,
    challenge=challenge,
    url="https://capskip.com/ru/captcha-demo/geetest-v3/",
)

print(result["challenge"])   # geetest_challenge
print(result["validate"])    # geetest_validate
print(result["seccode"])     # geetest_seccode
const { CapSkip } = require('capskip');

// Connect to the CapSkip app running on your machine
const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });

// Solve the GeeTest v3 slider on this page
const result = await solver.geetest(
  gt,
  challenge,
  'https://capskip.com/ru/captcha-demo/geetest-v3/',
);

console.log(result.challenge); // geetest_challenge
console.log(result.validate);  // geetest_validate
console.log(result.seccode);   // geetest_seccode
<?php
require 'vendor/autoload.php';

use CapSkip\CapSkip;

// Connect to the CapSkip app running on your machine
$solver = new CapSkip(['host' => '127.0.0.1', 'port' => 8080]);

// Solve the GeeTest v3 slider on this page
$result = $solver->geetest(
    $gt,
    $challenge,
    'https://capskip.com/ru/captcha-demo/geetest-v3/'
);

echo $result['challenge'];  // geetest_challenge
echo $result['validate'];   // geetest_validate
echo $result['seccode'];    // geetest_seccode
using CapSkip;

// Connect to the CapSkip app running on your machine
var solver = new CapSkipClient(host: "127.0.0.1", port: 8080);

// Solve the GeeTest v3 slider on this page
var result = await solver.GeetestAsync(
    gt,
    challenge,
    "https://capskip.com/ru/captcha-demo/geetest-v3/");

Console.WriteLine(result.Challenge);  // geetest_challenge
Console.WriteLine(result.Validate);   // geetest_validate
Console.WriteLine(result.Seccode);    // geetest_seccode

Вы получаете challenge, validate и seccode, готовый к отправке.

4

Используйте три значения

Отправьте триплет обратно под теми именами, которые использует сам виджет. На этой странице это тот же вызов admin-ajax, что и Проверить шаг, который проверяет seccode через GeeTest, прежде чем он станет зелёным.

// The three values GeeTest returns, exactly as the widget produces them
const payload = {
  geetest_challenge: result.challenge,
  geetest_validate:  result.validate,
  geetest_seccode:   result.seccode,
};

// Send them to whatever endpoint the site verifies with, then submit the form.
// This demo posts challenge, validate and seccode to admin-ajax.php with
// action=capskip_captcha_verify and provider=geetest_v3.
Дополнительно

Использование CapSkip на других сайтах с GeeTest v3

Чтобы решить GeeTest v3 где угодно, вам нужны три вещи со страницы:

  • gt: публичный captcha ID, статичный для сайта. Это gt query-параметр в вызовах виджета к api.geetest.com/gettype.php и get.php.
  • challenge: одноразовое значение, которое приходит из собственного запроса init или register сайта, обычно в виде небольшого JSON-ответа рядом с gt. Повторяйте этот запрос перед каждым решением, чтобы получить свежую капчу.
  • URL страницы: полный адрес страницы.

Региональные API-серверы и прокси

Некоторые сайты привязаны к региональному endpoint GeeTest, например api-na.geetest.com. Передайте его как api_server через HTTP API, когда это так. proxy (proxy и proxytype) также поддерживается, что помогает, когда сайт привязывает challenge к вашему IP.

result = solver.geetest(
    gt="GT_FROM_PAGE",
    challenge="FRESH_CHALLENGE",   # register a new one right before every solve
    url="https://example.com/login",
)

challenge = result["challenge"]   # geetest_challenge
validate = result["validate"]     # geetest_validate
seccode = result["seccode"]       # geetest_seccode
const result = await solver.geetest(
  'GT_FROM_PAGE',
  'FRESH_CHALLENGE',   // register a new one right before every solve
  'https://example.com/login',
);

const { challenge, validate, seccode } = result;
$result = $solver->geetest(
    'GT_FROM_PAGE',
    'FRESH_CHALLENGE',   // register a new one right before every solve
    'https://example.com/login'
);

$challenge = $result['challenge'];  // geetest_challenge
$validate = $result['validate'];    // geetest_validate
$seccode = $result['seccode'];      // geetest_seccode
var result = await solver.GeetestAsync(
    "GT_FROM_PAGE",
    "FRESH_CHALLENGE",   // register a new one right before every solve
    "https://example.com/login");

string challenge = result.Challenge;  // geetest_challenge
string validate = result.Validate;    // geetest_validate
string seccode = result.Seccode;      // geetest_seccode

Если решение возвращается отклонённым, обычная причина — устаревшая проверка: он уже был использован страницей или пролежал неиспользованным более минуты.

Не используете Python, Node.js, PHP или C#? SDK — это всего лишь обёртки над HTTP API CapSkip (стандартный in.php / res.php эндпоинты с method=geetest), так что вы можете решать GeeTest v3 из любой язык, фреймворк или инструмент. См. Справочник по API GeeTest v3.

Без изменений в коде

Вариант 3: направьте существующий код сервиса-решателя в CapSkip

Уже решаете GeeTest v3 через сервис с оплатой за капчу, такой как 2Captcha, Anti-Captcha или CapMonster? Вам не нужно переписывать ни строки. Приложение CapSkip включает эмулятор сервиса который локально говорит на собственных API этих сервисов: выберите используемый сервис, нажмите Добавить в файл hosts, и на каждый запрос, который ваш бот, парсер или готовый инструмент уже отправляет ему, отвечает CapSkip на вашей собственной машине — по фиксированной цене вместо счёта за каждое решение.

1

Выберите свой сервис

Откройте приложение CapSkip и выберите сервис, с которым уже работает ваш код: 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha, SolveCaptcha или Captchas.io.

2

Добавить в файл hosts

Один клик в приложении направляет домен этого сервиса на CapSkip, поэтому вызовы, которые делает ваш инструмент, обрабатываются на вашей машине, а не уходят к платному API.

3

Запускайте свой инструмент без изменений

Тот же ключ API, тот же запрос, тот же цикл опроса. CapSkip отвечает в собственном формате этого сервиса, и ваш код получает обратно решённую капчу, значения validate и seccode.

Ничего из приведённого ниже не меняется при переходе. Это тот же вызов, который ваш код делает сегодня, за исключением того, что GeeTest v3 теперь решается локально, а решённые значения challenge, validate и seccode возвращаются из CapSkip:

POST https://2captcha.com/in.php
     key=YOUR_EXISTING_API_KEY
     method=geetest
     gt=e3a600a044ef0ad51749da5c451adca0
     challenge=FRESH_CHALLENGE_FROM_THE_PAGE
     pageurl=https://capskip.com/ru/captcha-demo/geetest-v3/

GET  https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
     {"geetest_challenge":"…","geetest_validate":"…","geetest_seccode":"…"}

Клиентские библиотеки работают так же: в стиле Anti-Captcha createTask / getTaskResult пара, или любая обёртка, построенная на одном из этих сервисов, продолжает работать, как только включён эмулятор. Полный справочник по запросам и ответам находится в Документация по API CapSkip.

Об этом демо GeeTest v3

Эта страница — живая Демо GeeTest v3 где вы можете протестировать, как работает головоломка со сдвигом фрагмента на место, и увидеть её решение в реальном времени. GeeTest v3 — это слайдер-капча, которую вы встречаете на формах входа и регистрации по всему миру: из картинки вырезается фрагмент, и вы перетаскиваете его обратно в пробел. Решите её — и GeeTest возвращает три значения, geetest_challenge, geetest_validate и geetest_seccode, который ваш сервер сверяет с GeeTest, прежде чем доверять запросу.

Разработчики, тестировщики и инженеры по автоматизации могут использовать эту тестовую страницу GeeTest v3, чтобы увидеть, как регистрируется задача, срабатывает слайдер и возвращается триплет, и оценить, как CapSkip решает GeeTest v3. Нужно ли вам решить GeeTest один раз или автоматизировать тысячи решений, CapSkip — это Решение для GeeTest который работает тремя способами: без кода расширение для распознавания капчи для Chrome и Firefox, и SDK для распознавания капчи для Python, Node.js, PHP и C#, а также готовую эмуляцию сервисов распознавания капчи, за которые вы, возможно, сегодня платите за каждое решение, — всё с безлимитным решением по единой фиксированной цене. Все три работают на одном и том же десктопном AI распознавание капчи, устанавливается один раз и работает на вашей машине, поэтому ничто не ставится в очередь на удалённом сервере и ничто не тарифицируется за каждое решение.

Могу ли я сохранить свой существующий код 2Captcha или Anti-Captcha?
Да. Приложение CapSkip эмулирует API 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha и SolveCaptcha. Выберите свой сервис в приложении, нажмите «Add to hosts file» — и запросы, которые ваш код уже отправляет, решаются локально в CapSkip, без изменений в коде и без платы за каждое решение.
Как решить GeeTest v3?
Установите Расширение CapSkip или SDK, запустите десктопное приложение CapSkip, и CapSkip вернёт валидные challenge, validate и seccode для gt и challenge, которые вы ему передадите. Расширение само передвигает элемент пазла на странице, а SDK позволяет решать GeeTest v3 из вашего собственного кода.
Можно ли обойти GeeTest v3?
Да. CapSkip — это решение для GeeTest v3, которое определяет, где находится зазор, перетаскивает в него фрагмент и выдаёт вам тройку geetest_challenge, geetest_validate и geetest_seccode, которую вы можете отправить как реальный пользователь.
Почему для каждого решения нужен новый challenge?
GeeTest v3 разделяет свои параметры на два. gt — это статический идентификатор сайта, а challenge — одноразовый: он истекает примерно за минуту, и загрузка виджета его расходует. Регистрируйте новый challenge непосредственно перед каждым решением, ровно как в шаге 2 выше, иначе GeeTest отклонит ответ.
Насколько быстро CapSkip решает GeeTest v3?
CapSkip обычно возвращает триплет GeeTest v3 за несколько секунд. Каждое решение выполняется локально на вашем устройстве, поэтому ничего не ставится в очередь на удалённом сервере, что здесь важно, ведь капча быстро истекает.
Можно ли использовать CapSkip с другими языками программирования?
Да. Помимо SDK для Python, Node.js, PHP и C#, CapSkip предоставляет стандартный HTTP API, так что вы можете решать GeeTest v3 на любом языке, фреймворке или инструменте. См. Справочник по API GeeTest v3.
CapSkip — это бесплатный сервис распознавания GeeTest?
Расширение устанавливается бесплатно, а пробный доступ за один доллар даёт вам полный доступ на семь дней с 1 000 решений. Платные лицензии открывают безлимитное решение по единой фиксированной цене, без платы за каждую капчу.