const axios = require('axios');
const sleep = require('util').promisify(setTimeout);
const API_KEY = 'ВАШ_API_КЛЮЧ_2CAPTCHA'; // Замените на ваш реальный API ключ
// Функция для решения reCAPTCHA v2
async function solveReCaptchaV2(siteKey, pageUrl) {
try {
// Отправляем запрос на решение капчи
const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, {
params: {
key: API_KEY,
method: 'userrecaptcha',
googlekey: siteKey,
pageurl: pageUrl,
json: 1
}
});
if (sendCaptchaResponse.data.status !== 1) {
throw new Error(`Ошибка при отправке капчи: ${sendCaptchaResponse.data.request}`);
}
const requestId = sendCaptchaResponse.data.request;
console.log(`Капча отправлена, ID запроса: ${requestId}`);
// Ожидаем решение капчи
while (true) {
await sleep(5000); // Ждем 5 секунд перед следующим запросом
const getResultResponse = await axios.get(`http://2captcha.com/res.php`, {
params: {
key: API_KEY,
action: 'get',
id: requestId,
json: 1
}
});
if (getResultResponse.data.status === 1) {
console.log('Капча решена успешно.');
return getResultResponse.data.request;
} else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') {
console.log('Капча еще не решена, ожидаем...');
} else {
throw new Error(`Ошибка при решении капчи: ${getResultResponse.data.request}`);
}
}
} catch (error) {
console.error(`Произошла ошибка: ${error.message}`);
}
}
// Функция для решения reCAPTCHA v3
async function solveReCaptchaV3(siteKey, pageUrl, action = 'verify', minScore = 0.3) {
try {
// Отправляем запрос на решение капчи
const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, {
params: {
key: API_KEY,
method: 'userrecaptcha',
googlekey: siteKey,
pageurl: pageUrl,
version: 'v3',
action: action,
min_score: minScore,
json: 1
}
});
if (sendCaptchaResponse.data.status !== 1) {
throw new Error(`Ошибка при отправке капчи: ${sendCaptchaResponse.data.request}`);
}
const requestId = sendCaptchaResponse.data.request;
console.log(`Капча отправлена, ID запроса: ${requestId}`);
// Ожидаем решение капчи
while (true) {
await sleep(5000); // Ждем 5 секунд перед следующим запросом
const getResultResponse = await axios.get(`http://2captcha.com/res.php`, {
params: {
key: API_KEY,
action: 'get',
id: requestId,
json: 1
}
});
if (getResultResponse.data.status === 1) {
console.log('Капча решена успешно.');
return getResultResponse.data.request;
} else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') {
console.log('Капча еще не решена, ожидаем...');
} else {
throw new Error(`Ошибка при решении капчи: ${getResultResponse.data.request}`);
}
}
} catch (error) {
console.error(`Произошла ошибка: ${error.message}`);
}
}
// Пример использования для reCAPTCHA v2
(async () => {
const siteKeyV2 = 'ВАШ_SITE_KEY_V2'; // Замените на реальный site key
const pageUrlV2 = 'https://example.com'; // Замените на реальный URL страницы
const tokenV2 = await solveReCaptchaV2(siteKeyV2, pageUrlV2);
console.log(`Полученный токен для reCAPTCHA v2: ${tokenV2}`);
})();
// Пример использования для reCAPTCHA v3
(async () => {
const siteKeyV3 = 'ВАШ_SITE_KEY_V3'; // Замените на реальный site key
const pageUrlV3 = 'https://example.com'; // Замените на реальный URL страницы
const action = 'homepage'; // Замените на соответствующее действие
const minScore = 0.5; // Задайте минимальный допустимый балл
const tokenV3 = await solveReCaptchaV3(siteKeyV3, pageUrlV3, action, minScore);
console.log(`Полученный токен для reCAPTCHA v3: ${tokenV3}`);
})();
Дак вроде есть немало библиотек, в три строки подключаемых, которые помогают с рекапчей. Просто пока что не понимаю, в чем резон использовать именно этот вариант.
Но вообще прикольно, конечно. Главное это на гитхаб залить, авось кто-то да наткнется.
Прочитал ваш коммент и пошел дописывать статью - буду изучать библиотеки
продолжают защищать свои проекты именно капчейПамятником интернету будет пожарный гидрант.