Как обойти капчу в брузере через Tampermonkey
How to bypass captcha using Tampermonkey
Если автоматизируете работу с сайтами — будь то парсинг, автотесты или автозаполнение форм — рано или поздно вы столкнётесь с капчей. Большинство решений требуют серверной интеграции, но в ряде случаев достаточно простого скрипта в браузере.
В этой статье я покажу, как с помощью расширения Tampermonkey и API обхода. Всё — на чистом JavaScript, без серверной части.
Что понадобится
- Расширение Tampermonkey
- Аккаунт на ruCaptcha и API-ключ
- Базовое знание JavaScript и умение работать в DOM
Установка Tampermonkey
- Установите расширение Tampermonkey для вашего браузера (Chrome, Firefox, Edge)
- Перейдите в панель расширения → Create a new script
- Удалите шаблонный код и вставьте подходящий скрипт из списка далее
Решение reCAPTCHA через Tampermonkey
reCAPTCHA v2 — это классическая "Я не робот" капча или её версия с изображениями. В HTML она выглядит так:
<div class="g-recaptcha" data-sitekey="..."></div>
Скрипт ниже:
- находит sitekey на странице
- создаёт задачу в 2Captcha через API v2
- опрашивает результат
- вставляет полученный токен
- автоматически отправляет форму, если она найдена
Скрипт для reCAPTCHA v2
// ==UserScript==
// @name Auto reCAPTCHA v2 Solver with 2Captcha
// @namespace https://your-captcha-service.com/
// @version 1.0
// @description Автоматически решает reCAPTCHA v2 с помощью API 2Captcha
// @match *://*/*
// @grant none
// ==/UserScript==
(async function () {
const API_KEY = 'ВАШ_API_КЛЮЧ_2CAPTCHA';
const sleep = ms => new Promise(r => setTimeout(r, ms));
const recaptcha = document.querySelector('.g-recaptcha[data-sitekey]');
if (!recaptcha) return;
const sitekey = recaptcha.getAttribute('data-sitekey');
const pageUrl = location.href;
const createTask = async () => {
const res = await fetch('https://api.2captcha.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'RecaptchaV2TaskProxyless',
websiteURL: pageUrl,
websiteKey: sitekey,
isInvisible: false
}
})
});
const data = await res.json();
if (data.errorId !== 0) throw new Error(data.errorDescription);
console.log('[2Captcha] Задача создана:', data.taskId);
return data.taskId;
};
const getToken = async (taskId) => {
for (let i = 0; i < 24; i++) {
await sleep(5000);
const res = await fetch('https://api.2captcha.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ clientKey: API_KEY, taskId })
});
const data = await res.json();
if (data.status === 'ready') return data.solution.gRecaptchaResponse;
}
throw new Error('Таймаут: капча не решена вовремя');
};
const token = await getToken(await createTask());
console.log('[2Captcha] Токен получен');
let el = document.querySelector('[name="g-recaptcha-response"]');
if (!el) {
el = document.createElement('textarea');
el.name = 'g-recaptcha-response';
el.style.display = 'none';
document.body.appendChild(el);
}
el.value = token;
const form = recaptcha.closest('form');
if (form) form.submit();
})();
Решение hCaptcha через Tampermonkey
hCaptcha — альтернатива reCAPTCHA, активно используется на сайтах, защищённых Cloudflare. В HTML выглядит так:
<div class="h-captcha" data-sitekey="..."></div>
Для её распознавания нужен другой тип задачи в API: HCaptchaTaskProxyless
.
Скрипт для hCaptcha
// ==UserScript==
// @name Auto hCaptcha Solver with 2Captcha
// @namespace https://your-captcha-service.com/
// @version 1.0
// @description Автоматически решает hCaptcha с помощью API 2Captcha
// @match *://*/*
// @grant none
// ==/UserScript==
(async function () {
const API_KEY = 'ВАШ_API_КЛЮЧ_2CAPTCHA';
const sleep = ms => new Promise(r => setTimeout(r, ms));
const hcaptcha = document.querySelector('.h-captcha[data-sitekey]');
if (!hcaptcha) return;
const sitekey = hcaptcha.getAttribute('data-sitekey');
const pageUrl = location.href;
const createTask = async () => {
const res = await fetch('https://api.2captcha.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'HCaptchaTaskProxyless',
websiteURL: pageUrl,
websiteKey: sitekey
}
})
});
const data = await res.json();
if (data.errorId !== 0) throw new Error(data.errorDescription);
console.log('[2Captcha] Задача создана:', data.taskId);
return data.taskId;
};
const getToken = async (taskId) => {
for (let i = 0; i < 24; i++) {
await sleep(5000);
const res = await fetch('https://api.2captcha.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ clientKey: API_KEY, taskId })
});
const data = await res.json();
if (data.status === 'ready') return data.solution.gRecaptchaResponse;
}
throw new Error('Таймаут: капча не решена вовремя');
};
const token = await getToken(await createTask());
console.log('[2Captcha] Токен получен');
let el = document.querySelector('[name="h-captcha-response"]');
if (!el) {
el = document.createElement('textarea');
el.name = 'h-captcha-response';
el.style.display = 'none';
document.body.appendChild(el);
}
el.value = token;
const form = hcaptcha.closest('form');
if (form) form.submit();
})();
Что может пойти не так
- Капча не найдена? Подождите загрузки страницы или используйте
MutationObserver
- Токен не работает? Возможно, сайт требует триггера JS-события (например,
click
) - Задача не решается? Убедитесь, что баланс на 2Captcha не нулевой
Заключение
Tampermonkey и API ruCaptcha позволяют полностью автоматизировать решение капчи прямо в браузере. Это удобно для:
- автотестов
- автозаполнения форм
- быстрой проверки защищённых страниц
Если нужна поддержка invisible капч, Cloudflare Turnstile или прокси — напишите в поддержку, отправим отдельный скрипт.