Как решить 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 распознавание капчи, устанавливается один раз и работает на вашей машине, поэтому ничто не ставится в очередь на удалённом сервере и ничто не тарифицируется за каждое решение.
