Как решить hCaptcha
Поле выше работает как живая hCaptcha проверка с флажком. Эта страница показывает два способа решить hCaptcha и получить валидный h-captcha-response токен: вызывая HTTP API CapSkip из собственного кода или направив сервис капчи, к которому уже обращаются ваши инструменты, в CapSkip. CapSkip работает как безлимитный сервис распознавания hCaptcha локально на вашем устройстве, поэтому нет платы за каждое решение и ничего не покидает вашу машину.
Вариант 1: решение hCaptcha с помощью HTTP API CapSkip
Создаёте автоматизацию, парсер или бота? Отправьте site key и URL этой страницы в приложение CapSkip одним запросом, опрашивайте результат, и CapSkip вернёт свежий токен hCaptcha, который можно отправить как настоящий. API использует стандартные in.php / res.php эндпоинты, поэтому работает из Python, Node.js, PHP, C# или любого другого языка, который умеет выполнять HTTP-запросы.
10000000-ffff-ffff-ffff-000000000001
https://capskip.com/ru/captcha-demo/hcaptcha/
Прежде чем начать
CapSkip решает капчу локально. Скачайте и запустите Десктопное приложение CapSkip и держите его открытым в фоновом режиме. Ваш код обращается к нему по 127.0.0.1:8080, поэтому нет обращений к облаку и нет платы за каждое решение.
Отправьте hCaptcha в CapSkip
Передайте для этой страницы sitekey и pageurl в in.php с помощью method=hcaptcha. CapSkip сразу отвечает ID задачи.
import time
import requests
API = "http://127.0.0.1:8080" # the CapSkip app on your machine
KEY = "YOUR_API_KEY"
# 1. Submit the hCaptcha shown on this page
task = requests.post(f"{API}/in.php", data={
"key": KEY,
"method": "hcaptcha",
"sitekey": "10000000-ffff-ffff-ffff-000000000001",
"pageurl": "https://capskip.com/ru/captcha-demo/hcaptcha/",
"json": 1,
}).json()["request"]
# 2. Poll until the token is ready
while True:
time.sleep(5)
res = requests.get(f"{API}/res.php", params={
"key": KEY, "action": "get", "id": task, "json": 1,
}).json()
if res["request"] != "CAPCHA_NOT_READY":
break
token = res["request"] # the h-captcha-response token
print(token)const API = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
const KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
(async () => {
// 1. Submit the hCaptcha shown on this page
const submit = await fetch(`${API}/in.php`, {
method: 'POST',
body: new URLSearchParams({
key: KEY,
method: 'hcaptcha',
sitekey: '10000000-ffff-ffff-ffff-000000000001',
pageurl: 'https://capskip.com/ru/captcha-demo/hcaptcha/',
json: '1',
}),
}).then((r) => r.json());
// 2. Poll until the token is ready
let res;
do {
await sleep(5000);
res = await fetch(`${API}/res.php?key=${KEY}&action=get&id=${submit.request}&json=1`)
.then((r) => r.json());
} while (res.request === 'CAPCHA_NOT_READY');
const token = res.request; // the h-captcha-response token
console.log(token);
})();<?php
$api = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
$key = 'YOUR_API_KEY';
// 1. Submit the hCaptcha shown on this page
$ch = curl_init("$api/in.php");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'key' => $key,
'method' => 'hcaptcha',
'sitekey' => '10000000-ffff-ffff-ffff-000000000001',
'pageurl' => 'https://capskip.com/ru/captcha-demo/hcaptcha/',
'json' => 1,
]),
]);
$task = json_decode(curl_exec($ch), true)['request'];
// 2. Poll until the token is ready
do {
sleep(5);
$res = json_decode(file_get_contents(
"$api/res.php?key=$key&action=get&id=$task&json=1"
), true);
} while ($res['request'] === 'CAPCHA_NOT_READY');
$token = $res['request']; // the h-captcha-response token
echo $token;using System.Text.Json;
const string Api = "http://127.0.0.1:8080"; // the CapSkip app on your machine
const string Key = "YOUR_API_KEY";
var http = new HttpClient();
// 1. Submit the hCaptcha shown on this page
var submit = await http.PostAsync($"{Api}/in.php", new FormUrlEncodedContent(new Dictionary<string, string>
{
["key"] = Key,
["method"] = "hcaptcha",
["sitekey"] = "10000000-ffff-ffff-ffff-000000000001",
["pageurl"] = "https://capskip.com/ru/captcha-demo/hcaptcha/",
["json"] = "1",
}));
string task = JsonDocument.Parse(await submit.Content.ReadAsStringAsync())
.RootElement.GetProperty("request").GetString()!;
// 2. Poll until the token is ready
string token;
do
{
await Task.Delay(5000);
var res = JsonDocument.Parse(await http.GetStringAsync(
$"{Api}/res.php?key={Key}&action=get&id={task}&json=1"));
token = res.RootElement.GetProperty("request").GetString()!;
} while (token == "CAPCHA_NOT_READY");
Console.WriteLine(token); // the h-captcha-response tokenВы получаете длинный токен, который обычно начинается с P1_, валиден для этого site key и готов к отправке. В том же ответе также приходят respKey и useragent браузера, который его решил.
Используйте токен
Поместите токен в скрытое поле виджета h-captcha-response (textarea). hCaptcha также заполняет поле g-recaptcha-response (textarea) для сайтов, которые читают именно его, поэтому задайте оба. Если виджет был отрисован с параметром data-callback, запустите эту функцию с токеном. Затем отправьте форму, и ваш сервер проверит её через hCaptcha siteverify. Обратите внимание, что это демо проверяет токен через собственный callback виджета, поэтому оно проверяет токен, созданный виджетом, а не тот, который вы помещаете в поле.
// 1. Drop the solved token into both response fields
document.querySelector('[name="h-captcha-response"]').value = token;
document.querySelector('[name="g-recaptcha-response"]').value = token;
// 2. If the widget has a data-callback, run it with the token
const cb = document.querySelector('.h-captcha')?.dataset.callback;
if (cb && window[cb]) window[cb](token);
// 3. ...then submit your form.Невидимая hCaptcha и hCaptcha Enterprise
У невидимого виджета нет флажка, и он открывается, только когда сайт вызывает hcaptcha.execute(); добавьте invisible=1 в запрос. Сайты Enterprise часто передают виджету значение rqdata ; отправьте его в параметре data. Если сайт проверяет браузер, отправляйте токен с точно тем же useragent который возвращает CapSkip.
POST http://127.0.0.1:8080/in.php
key=YOUR_API_KEY
method=hcaptcha
sitekey=SITEKEY_FROM_THE_PAGE
pageurl=https://the-protected-site.com/login
invisible=1
data=RQDATA_FROM_THE_PAGE
json=1
GET http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1
{"status":1,"request":"P1_eyJ0eXAiOiJKV1Qi…","respKey":"E0_eyJ0eXAi…","useragent":"Mozilla/5.0 …"}API также принимает proxy и proxytype, что помогает, когда сайт проверяет, что токен был получен с вашего собственного IP. Клиенты в стиле Anti-Captcha могут отправить ту же задачу как createTask с типом HCaptchaTaskProxyless, HCaptchaTask или HCaptchaEnterpriseTask.
Полный список параметров запроса, полей ответа и кодов ошибок находится в Документация по API CapSkip.
Вариант 2: направьте существующий код сервиса-решателя в CapSkip
Уже решаете hCaptcha через сервис с оплатой за капчу, такой как 2Captcha, Anti-Captcha или CapSolver? Вам не нужно переписывать ни строки. Приложение CapSkip включает эмулятор сервиса который локально говорит на собственных API этих сервисов: выберите используемый сервис, нажмите Добавить в файл hosts, и на каждый запрос, который ваш бот, парсер или готовый инструмент уже отправляет ему, отвечает CapSkip на вашей собственной машине, по фиксированной цене вместо счёта за каждое решение.
Выберите свой сервис
Откройте приложение CapSkip и выберите сервис, с которым уже работает ваш код: 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha, SolveCaptcha, NextCaptcha, EzCaptcha или Captchas.io.
Добавить в файл hosts
Один клик в приложении направляет домен этого сервиса на CapSkip, поэтому вызовы, которые делает ваш инструмент, обрабатываются на вашей машине, а не уходят к платному API.
Запускайте свой инструмент без изменений
Тот же API-ключ, тот же запрос, тот же цикл опроса. CapSkip отвечает в собственном формате этого сервиса, и ваш код получает обратно действительный токен h-captcha-response.
Ничего из приведённого ниже не меняется при переходе. Это тот же вызов, который ваш код делает сегодня, только теперь hCaptcha решается локально, и валидный токен h-captcha-response возвращается из CapSkip:
POST https://2captcha.com/in.php
key=YOUR_EXISTING_API_KEY
method=hcaptcha
sitekey=10000000-ffff-ffff-ffff-000000000001
pageurl=https://capskip.com/ru/captcha-demo/hcaptcha/
GET https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
OK|P1_eyJ0eXAi… the h-captcha-response token, solved by CapSkipКлиентские библиотеки работают так же: в стиле Anti-Captcha createTask / getTaskResult пара, или любая обёртка, построенная на одном из этих сервисов, продолжает работать, как только включён эмулятор. Полный справочник по запросам и ответам находится в Документация по API CapSkip.
Подробнее о решении hCaptcha
Руководства по инструментам и языкам, которые обычно используют вместе с этой демонстрацией.
Об этом демо hCaptcha
Эта страница работает как живая демо hCaptcha , где вы можете проверить, как работает hCaptcha, и увидеть её решение в реальном времени. hCaptcha представляет собой капчу с упором на конфиденциальность, которую многие сайты используют вместо reCAPTCHA: она показывает флажок «I am human», а если не уверена в посетителе, то и графическое задание, например выбрать подходящие картинки в сетке. Используйте её, чтобы изучить генерацию токена hCaptcha, h-captcha-response значение, а также процесс верификации, на который сайты полагаются для защиты форм, входов и регистраций от спама, злоупотреблений и ботов.
Разработчики, тестировщики и инженеры по автоматизации могут использовать эту тестовую страницу hCaptcha, чтобы проверить интеграции, подтвердить настройку и оценить, насколько быстро CapSkip решает hCaptcha. Нужно ли вам решить hCaptcha один раз или автоматизировать тысячи решений, CapSkip работает двумя способами: простой HTTP API, который можно вызывать из любого языка, и готовая эмуляция сервисов распознавания капчи, за которые вы, возможно, сегодня платите за каждое решение, и всё это с безлимитным решением по единой фиксированной цене. Оба способа работают на одном и том же десктопном AI распознавание капчи, устанавливается один раз и работает на вашей машине, поэтому ничто не ставится в очередь на удалённом сервере и ничто не тарифицируется за каждое решение.
