Нейросеть против обычного человеческого мозга - как обойти 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ы - будем посмотреть еще, что вы там предложите!!!

33
3 комментария

ты как код вставил на дтф че за

1
Ответить

Ахахаха, магия

1
Ответить

Там есть специальная плашка, называется код

1
Ответить