GreasyFork captcha solvers: solve reCAPTCHA and hCaptcha

GreasyFork captcha solvers: solve reCAPTCHA and hCaptcha

If you're automating stuff in the browser and run into captchas — here's how to solve them without backend or headless browsers.

Learn how to solve reCAPTCHA and hCaptcha directly in the browser using GreasyFork scripts API. No backend required.

You can inject a userscript via Tampermonkey or GreasyFork that:

  • Detects reCAPTCHA or hCaptcha
  • Sends it to 2Captcha
  • Waits for the solution
  • Injects it into the page
  • Submits the form

Tested with 2captcha.com, but works just as well with solvecaptcha.com — they’re API-compatible, and SolveCaptcha is usually cheaper.

hcaptcha solver greasyfork

// ==UserScript==
// @name         hCaptcha Solver
// @namespace    https://example.com/
// @version      1.0
// @match        *://*/*
// @grant        none
// ==/UserScript==

(async () => {
  const key = 'YOUR_API_KEY';
  const el = document.querySelector('.h-captcha[data-sitekey]');
  if (!el) return;
  const sitekey = el.getAttribute('data-sitekey');
  const pageurl = location.href;

  const task = await fetch('https://api.2captcha.com/createTask', {
    method: 'POST',
    body: JSON.stringify({
      clientKey: key,
      task: {
        type: 'HCaptchaTaskProxyless',
        websiteKey: sitekey,
        websiteURL: pageurl
      }
    }),
    headers: { 'Content-Type': 'application/json' }
  }).then(r => r.json());
  const taskId = task.taskId;

  for (let i = 0; i < 20; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch('https://api.2captcha.com/getTaskResult', {
      method: 'POST',
      body: JSON.stringify({ clientKey: key, taskId }),
      headers: { 'Content-Type': 'application/json' }
    }).then(r => r.json());
    if (res.status === 'ready') {
      const token = res.solution.gRecaptchaResponse;
      let input = document.querySelector('[name="h-captcha-response"]');
      if (!input) {
        input = document.createElement('textarea');
        input.name = 'h-captcha-response';
        input.style.display = 'none';
        document.body.appendChild(input);
      }
      input.value = token;
      el.closest('form')?.submit();
      break;
    }
  }
})();

recaptcha solver greasyfork

// ==UserScript==
// ==UserScript==
// @name         reCAPTCHA Solver
// @namespace    https://example.com/
// @version      1.0
// @match        *://*/*
// @grant        none
// ==/UserScript==

(async () => {
  const key = 'YOUR_API_KEY';
  const el = document.querySelector('.g-recaptcha[data-sitekey]');
  if (!el) return;
  const sitekey = el.getAttribute('data-sitekey');
  const pageurl = location.href;

  const task = await fetch('https://api.2captcha.com/createTask', {
    method: 'POST',
    body: JSON.stringify({
      clientKey: key,
      task: {
        type: 'RecaptchaV2TaskProxyless',
        websiteKey: sitekey,
        websiteURL: pageurl,
        isInvisible: false
      }
    }),
    headers: { 'Content-Type': 'application/json' }
  }).then(r => r.json());
  const taskId = task.taskId;

  for (let i = 0; i < 20; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch('https://api.2captcha.com/getTaskResult', {
      method: 'POST',
      body: JSON.stringify({ clientKey: key, taskId }),
      headers: { 'Content-Type': 'application/json' }
    }).then(r => r.json());
    if (res.status === 'ready') {
      const token = res.solution.gRecaptchaResponse;
      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;
      el.closest('form')?.submit();
      break;
    }
  }
})();

You can swap the API host to https://api.solvecaptcha.com and it’ll work with their service too — they’re usually faster and cheaper. Just replace the API key and you’re good to go.