Как решить 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 — без написания кода.
Установите расширение
Добавьте CapSkip из Chrome Web Store или Firefox Add-ons. Он также работает в Brave, Edge, Opera и Vivaldi.
Запустите приложение CapSkip
Установите и откройте десктопное приложение CapSkip. Оно выполняет распознавание на вашем устройстве и работает в паре с расширением.
Решает автоматически
Перезагрузите эту страницу — и CapSkip сам вставит кусочек пазла в нужное место. Предпочитаете сохранять контроль? Переключитесь в ручной режим в любой момент.
Вариант 2: решение GeeTest v3 с помощью CapSkip SDK
Создаёте автоматизацию, парсер или бота? Используйте SDK для распознавания капчи CapSkip чтобы решать GeeTest v3 из Python, Node.js, PHP или C#. Вы передаёте этой страницы gt, свежий challenge и URL страницы, и CapSkip возвращает решённые значения challenge, validate и seccode, которые вы можете отправить как настоящие.
e3a600a044ef0ad51749da5c451adca0https://capskip.com/ru/captcha-demo/geetest-v3/Прежде чем начать
CapSkip решает капчу локально. Скачайте и запустите Десктопное приложение CapSkip и держите его открытым в фоновом режиме. SDK обращается к нему по 127.0.0.1:8080, поэтому нет обращений к облаку и нет платы за каждое решение.
challenge истекает
В отличие от site key у reCAPTCHA, для GeeTest v3 нужны два значения. gt выше статично и никогда не меняется, но challenge одноразовый и умирает примерно через минуту, и он сгорает в тот момент, когда виджет его загружает. Получайте свежий непосредственно перед каждым решением — именно это и делает шаг 2.
Установите SDK
Добавьте официальный клиент CapSkip в свой проект.
pip install capskipnpm install capskipcomposer require capskip/capskipdotnet add package CapSkipПолучите свежие 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. Решите её сразу же.
Решите 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_seccodeconst { 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_seccodeusing 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, готовый к отправке.
Используйте три значения
Отправьте триплет обратно под теми именами, которые использует сам виджет. На этой странице это тот же вызов 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, статичный для сайта. Это
gtquery-параметр в вызовах виджета к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_seccodeconst 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_seccodevar 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 на вашей собственной машине — по фиксированной цене вместо счёта за каждое решение.
Выберите свой сервис
Откройте приложение CapSkip и выберите сервис, с которым уже работает ваш код: 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha, SolveCaptcha или Captchas.io.
Добавить в файл hosts
Один клик в приложении направляет домен этого сервиса на CapSkip, поэтому вызовы, которые делает ваш инструмент, обрабатываются на вашей машине, а не уходят к платному API.
Запускайте свой инструмент без изменений
Тот же ключ 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 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 распознавание капчи, устанавливается один раз и работает на вашей машине, поэтому ничто не ставится в очередь на удалённом сервере и ничто не тарифицируется за каждое решение.
