Как обойти капчи на любом сайте через Greasy Fork
Если при тестировании или парсинге вы сталкиваетесь с reCAPTCHA или другой капчей, нет нужды подключать Selenium, Puppeteer или писать серверный код. Достаточно внедрить userscript прямо в браузер и поручить решение сервису 2Captcha.
В этой статье — как написать свои userscripts для Tampermonkey или Greasy Fork. Пример показан для reCAPTCHA.
Что понадобится
- Аккаунт на 2Captcha и API-ключ
- Расширение Tampermonkey или Violentmonkey
- Скрипт (локальный или опубликованный через Greasy Fork)
- Базовые знания JavaScript
Обход reCAPTCHA в Greasy Fork
reCAPTCHA v2 — это либо чекбокс “Я не робот”, либо задание с изображениями. Решается через RecaptchaV2TaskProxyless
.
Скрипт ниже:
- Ищет
data-sitekey
на странице - Создаёт задачу в 2Captcha
- Ждёт решения
- Вставляет токен
- Отправляет форму
// ==UserScript==
// @name reCAPTCHA Solver GreasyFork
// @namespace https://example.com/
// @version 1.0
// @description Решает reCAPTCHA v2 с помощью 2Captcha API
// @match *://*/*
// @grant none
// ==/UserScript==
(async function () {
const API_KEY = 'YOUR_2CAPTCHA_API_KEY';
const sleep = ms => new Promise(r => setTimeout(r, ms));
const el = document.querySelector('.g-recaptcha[data-sitekey]');
if (!el) return;
const sitekey = el.getAttribute('data-sitekey');
const url = window.location.href;
const task = await fetch('https://api.2captcha.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'RecaptchaV2TaskProxyless',
websiteKey: sitekey,
websiteURL: url,
isInvisible: false
}
})
}).then(res => res.json());
if (task.errorId) throw new Error(task.errorDescription);
const taskId = task.taskId;
let token;
for (let i = 0; i < 20; i++) {
await sleep(5000);
const result = await fetch('https://api.2captcha.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(res => res.json());
if (result.status === 'ready') {
token = result.solution.gRecaptchaResponse;
break;
}
}
if (!token) throw new Error('Таймаут: капча не решена');
let input = document.querySelector('[name="g-recaptcha-response"]');
if (!input) {
input = document.createElement('textarea');
input.name = 'g-recaptcha-response';
input.style.display = 'none';
document.body.appendChild(input);
}
input.value = token;
const form = el.closest('form');
if (form) form.submit();
})();
Если вы хотите использовать этот скрипт на Greasy Fork — просто загрузите его туда и проверьте, что @match
охватывает нужные страницы. Скрипты универсальны и работают везде, где на странице есть капча.