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.