Как обойти Turnstile капчу с помощью нейросети и node.js?

Продолжая изучение современных нейросетей я все больше устоялся во мнении, что решать несложные задачи, связанные с разработкой и написанием кода можно делать без практических знаний. И что действительно нейросеть может вытеснить, так армию кворкеров, которые за 500 рублей предлагают написать вам тот или иной простенький скрипт.

В попытках это доказать я решил очередную нетривиальную, для меня, задачу по обходу Turnstile капча через сервис распознавания капчи 2капча и да, это была задача, связанна с написанием кода.

Пошли расскажу как…

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

В данном случае, прошло уже около 2-3 месяцев с момента решения предыдущей задачи — как я заставил нейросеть решить для меня капчу, и в этот раз все прошло максимально быстро и практически без ошибок.

На входе я предложил нейросети три страницы — страница с лендингом, на котором описывается, как 2капча умеет решать Turnstile CAPTCHA (как вы понимаете, конкретики там нет, так как эта страница представляет больше рекламную функцию, чем практическую) и страницу с АПИ сервиса, где уже подробно описан процес отправки капчи для ее решения и демо страница, на которой размещена сама капча, которую требуется решить. Помимо трех страниц, я скормил GPT Chat-у небольшой промт, следующего содержания:

«Представь что ты senior разработчик, изучи предоставленные страницы и напиши рабочий код для решения Turnstile капча. Составь подробную пошаговую инструкцию по запуску указанного кода и напиши, какие модули мне потребуются в процессе его запуска, а также как их установить».

В целом, могу смело сказать, что только мой «неоценимый» опыт в разработке не позволил провести полный цикл решения капчи с первого раза, но код реально вышел прям рабочий и прям с первого раза.

Итак, Чат написал мне работоспособный код и прислал подробную инструкцию, которая содержала следующие рекомендации:

Сам код, который должен распологаться в файле index.js

const axios = require(‘axios’);
require(‘dotenv’).config(); // Инициализация dotenv

const YOUR_API_KEY = process.env.API_KEY;
console.log(«Loaded API Key:», YOUR_API_KEY); // Вывод API-ключа для проверки

const TURNSTILE_SITE_KEY = ‘1x00000000000000000000AA’;
const TURNSTILE_URL = ‘https://2captcha.com/demo/cloudflare-turnstile?cf-turnstile-response=’;

async function solveCaptcha() {
try {
const response = await axios.post(‘https://2captcha.com/in.php’, null, {
params: {
key: YOUR_API_KEY,
method: ‘turnstile’,
sitekey: TURNSTILE_SITE_KEY,
pageurl: TURNSTILE_URL
}
});

if (response.data.indexOf(«OK|») !== -1) {
const captchaId = response.data.split(«|»)[1];
console.log(«Captcha ID:», captchaId);
return captchaId;
} else if (response.data.indexOf(«ERROR_WRONG_USER_KEY») !== -1) {
console.error(«Invalid API Key. Please check your 2Captcha API Key.»);
throw new Error(«Invalid API Key»);
} else {
console.error(«Error submitting captcha:», response.data);
throw new Error(«Failed to submit captcha»);
}
} catch (error) {
console.error(«Error:», error);
throw error;
}
}

async function getSolution(captchaId) {
try {
while (true) {
const result = await axios.get(‘https://2captcha.com/res.php’, {
params: {
key: YOUR_API_KEY,
action: ‘get’,
id: captchaId
}
});

if (result.data === «CAPCHA_NOT_READY») {
console.log(«Captcha not ready yet, waiting…»);
await new Promise(resolve => setTimeout(resolve, 5000));
} else if (result.data.indexOf(«OK|») !== -1) {
const token = result.data.split(«|»)[1];
console.log(«Captcha solution:», token);
return token;
} else if (result.data.indexOf(«ERROR_WRONG_USER_KEY») !== -1) {
console.error(«Invalid API Key. Please check your 2Captcha API Key.»);
throw new Error(«Invalid API Key»);
} else {
console.error(«Error getting captcha solution:», result.data);
throw new Error(«Failed to get captcha solution»);
}
}
} catch (error) {
console.error(«Error:», error);
throw error;
}
}

async function bypassCaptcha() {
try {
const captchaId = await solveCaptcha();
const solution = await getSolution(captchaId);
console.log(«Final captcha solution:», solution);

// Здесь вы можете отправить решение на страницу, на которую хотите попасть
// Например:
// await axios.post(‘https://targetwebsite.com/submit’, {
// ‘cf-turnstile-response’: solution
// });
} catch (error) {
console.error(«Error bypassing captcha:», error);
}
}

bypassCaptcha();

Рекомендации

Установка неоюходимых модулей

npm install axios dotenv

Создайте файл .env и добавьте туда ваш API-ключ от сервиса 2Captcha:

API_KEY=YOUR_2CAPTCHA_API_KEY

Далее он подробно описал, принцип работы кода, я думаю мы пропустим этот кусок, так как практической пользя в нашем случае он не несет.

Ну а так, как я указал конкретную страницу, где расположена капча, нейросеть сразу же подставила в код URL и мне осталось найти на странице Sitekey и добавить его в скрипт в указанное место (с этим я разобрался и без его помощи, пфф).

Запустите код:

node index.js

В принципе все, код отработал как надо, но проблема в том, что это было только половина решения, так как для того, чтобы громогласно заявить, что я смог решить капчу через нейросеть… Опять… Требовалось, чтобы на странице с капчей появилась заветная надпись — «Капча пройдена», но рна не появлялась. Скрипт то отрабатывал как надо — отправлял запрос на сервера 2капчи, проверял наличие ответа и забирал готовый токен. На этом все. Дальше с этим токеном надо было что то делать и вот на это-то что-то я и потратил оставшиеся 40 минут.

То есть, чтобы просто вчитаться внимательно в последнюю строку мне потребовалось около 2 минут, а вот осознать, как реализовать отправку токена, через консоль браузера я смог не сразу)))

Устав ломать голову, я опять отправил описание чату и попросил помочь, ну он и помог. Оказалось так все было просто, аж стыдно стало.

В конце, для проверки валидности токена, который мне прислала 2капча нужно было перейти в консоль разработчика, вот что там говорится дословно:

«На этой демо странице мы используем поле input, значение которого можно поменять следующим образом:»

document.querySelector(‘[name=»cf-turnstile-response»]’).value = ‘TOKEN’;

Так вот, вместо слова «ТОКЕN» надо было подставить набор символов, который я получил от сервиса и нажать на кнопку — проверить.

И о, чудо — «Капча пройдена»

Как говорится — в очередь господа HRы — будем посмотреть еще, что вы там предложите!!!

 

Источник

Читайте также