Как обойти капчу в брузере через 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 она выглядит так:
            
            
              html
              
              
              
            
          
          <div class="g-recaptcha" data-sitekey="..."></div>
        Скрипт ниже:
- находит sitekey на странице
 - создаёт задачу в ruCaptcha через API v2
 - опрашивает результат
 - вставляет полученный токен
 - автоматически отправляет форму, если она найдена
 
Скрипт для reCAPTCHA v2
            
            
              js
              
              
              
            
          
          // ==UserScript==
// @name         Auto reCAPTCHA v2 Solver with ruCaptcha
// @namespace    https://your-captcha-service.com/
// @version      1.0
// @description  Автоматически решает reCAPTCHA v2 с помощью API ruCaptcha
// @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.rucaptcha.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('[ruCaptcha] Задача создана:', 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.rucaptcha.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('[ruCaptcha] Токен получен');
  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 выглядит так:
            
            
              html
              
              
              
            
          
          <div class="h-captcha" data-sitekey="..."></div>
        Для её распознавания нужен другой тип задачи в API: HCaptchaTaskProxyless.
Скрипт для hCaptcha
            
            
              js
              
              
              
            
          
          // ==UserScript==
// @name         Auto hCaptcha Solver with ruCaptcha
// @namespace    https://your-captcha-service.com/
// @version      1.0
// @description  Автоматически решает hCaptcha с помощью API ruCaptcha
// @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.rucaptcha.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('[ruCaptcha] Задача создана:', 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.rucaptcha.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('[ruCaptcha] Токен получен');
  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) - Задача не решается? Убедитесь, что баланс на ruCaptcha не нулевой
 
Заключение
Tampermonkey и API ruCaptcha позволяют полностью автоматизировать решение капчи прямо в браузере. Это удобно для:
- автотестов
 - автозаполнения форм
 - быстрой проверки защищённых страниц
 
Если нужна поддержка invisible капч, Cloudflare Turnstile или прокси — напишите в поддержку, отправим отдельный скрипт.