Продолжая изучение современных нейросетей я все больше устоялся во мнении, что решать несложные задачи, связанные с разработкой и написанием кода можно делать без практических знаний. И что действительно нейросеть может вытеснить, так армию кворкеров, которые за 500 рублей предлагают написать вам тот или иной простенький скрипт.
В попытках это доказать я решил очередную нетривиальную, для меня, задачу по обходу Turnstile капча через сервис распознавания капчи 2капча и да, это была задача, связанна с написанием кода.
Пошли расскажу как…
Но сперва немного текстового введения. Первый раз, когда я решал подобную задачу я потратил немало времени, объясняя нейросети, что мне требуется, да и в целом, не обошлось без привлечения настоящего погромиста. Код долго не запускался, выпадали ошибки, которые приходилось решать через нейросеть, но итог был ожидаем — задача была решена.
В данном случае, прошло уже около 2-3 месяцев с момента решения предыдущей задачи — как я заставил нейросеть решить для меня капчу, и в этот раз все прошло максимально быстро и практически без ошибок.
На входе я предложил нейросети три страницы — страница с лендингом, на котором описывается, как 2капча умеет решать Turnstile CAPTCHA (как вы понимаете, конкретики там нет, так как эта страница представляет больше рекламную функцию, чем практическую) и страницу с АПИ сервиса, где уже подробно описан процес отправки капчи для ее решения и демо страница, на которой размещена сама капча, которую требуется решить. Помимо трех страниц, я скормил GPT Chat-у небольшой промт, следующего содержания:
«Представь что ты senior разработчик, изучи предоставленные страницы и напиши рабочий код для решения Turnstile капча. Составь подробную пошаговую инструкцию по запуску указанного кода и напиши, какие модули мне потребуются в процессе его запуска, а также как их установить».
В целом, могу смело сказать, что только мой «неоценимый» опыт в разработке не позволил провести полный цикл решения капчи с первого раза, но код реально вышел прям рабочий и прям с первого раза.
Итак, Чат написал мне работоспособный код и прислал подробную инструкцию, которая содержала следующие рекомендации:
Сам код, который должен распологаться в файле index.js
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();
Рекомендации
Установка неоюходимых модулей
Создайте файл .env и добавьте туда ваш API-ключ от сервиса 2Captcha:
Далее он подробно описал, принцип работы кода, я думаю мы пропустим этот кусок, так как практической пользя в нашем случае он не несет.
Ну а так, как я указал конкретную страницу, где расположена капча, нейросеть сразу же подставила в код URL и мне осталось найти на странице Sitekey и добавить его в скрипт в указанное место (с этим я разобрался и без его помощи, пфф).
Запустите код:
В принципе все, код отработал как надо, но проблема в том, что это было только половина решения, так как для того, чтобы громогласно заявить, что я смог решить капчу через нейросеть… Опять… Требовалось, чтобы на странице с капчей появилась заветная надпись — «Капча пройдена», но рна не появлялась. Скрипт то отрабатывал как надо — отправлял запрос на сервера 2капчи, проверял наличие ответа и забирал готовый токен. На этом все. Дальше с этим токеном надо было что то делать и вот на это-то что-то я и потратил оставшиеся 40 минут.
То есть, чтобы просто вчитаться внимательно в последнюю строку мне потребовалось около 2 минут, а вот осознать, как реализовать отправку токена, через консоль браузера я смог не сразу)))
Устав ломать голову, я опять отправил описание чату и попросил помочь, ну он и помог. Оказалось так все было просто, аж стыдно стало.
В конце, для проверки валидности токена, который мне прислала 2капча нужно было перейти в консоль разработчика, вот что там говорится дословно:
«На этой демо странице мы используем поле input, значение которого можно поменять следующим образом:»
Так вот, вместо слова «ТОКЕN» надо было подставить набор символов, который я получил от сервиса и нажать на кнопку — проверить.
И о, чудо — «Капча пройдена»
Как говорится — в очередь господа HRы — будем посмотреть еще, что вы там предложите!!!



