Solves reCAPTCHA v2 image challenges in Chrome, Chromium, Playwright, Puppeteer and Selenium.
Uses your Solvecha API key. Free tier: 100 solves per day.
Get the latest solvecha-chrome-<version>.zip from Releases and unzip it.
curl -sL -o solvecha.zip https://github.com/Solvecha/solvecha-extension/releases/latest/download/solvecha-chrome.zip
unzip -q solvecha.zip -d solvecha-extensionEach release lists the SHA-256 of the zip.
- Create an account on solvecha.com. No card needed.
- Copy your key from the dashboard.
- Open
chrome://extensionsand turn on Developer mode. - Click Load unpacked and pick the unzipped folder.
- Open the extension's settings and paste your key.
Extensions need a headed browser or a virtual display such as xvfb-run. Use Chromium, Chrome for Testing or the Chromium that Playwright installs. Google Chrome 137 and newer ignores --load-extension.
import { chromium } from "playwright";
const ext = "/path/to/solvecha-extension"; // the unzipped folder
const context = await chromium.launchPersistentContext("/tmp/profile", {
headless: false,
args: [`--disable-extensions-except=${ext}`, `--load-extension=${ext}`],
});
// Save the key once. It stays in the profile folder.
let [worker] = context.serviceWorkers();
worker ??= await context.waitForEvent("serviceworker");
await worker.evaluate((key) => chrome.storage.local.set({ apiKey: key }), "YOUR_API_KEY");
const page = await context.newPage();
await page.goto("https://www.google.com/recaptcha/api2/demo");
// The extension solves the challenge. Wait for the result you need.import puppeteer from "puppeteer";
const ext = "/path/to/solvecha-extension"; // the unzipped folder
const browser = await puppeteer.launch({
headless: false,
args: [`--disable-extensions-except=${ext}`, `--load-extension=${ext}`],
});
// Save the key once on the settings page.
const worker = await browser.waitForTarget((t) => t.type() === "service_worker");
const id = new URL(worker.url()).host;
const settings = await browser.newPage();
await settings.goto(`chrome-extension://${id}/options.html`);
await settings.type("#key", "YOUR_API_KEY");
await settings.click("#save-key");
const page = await browser.newPage();
await page.goto("https://www.google.com/recaptcha/api2/demo");from selenium import webdriver
ext = "/path/to/solvecha-extension" # the unzipped folder
options = webdriver.ChromeOptions()
options.add_argument(f"--load-extension={ext}")
options.add_argument("--user-data-dir=/tmp/profile") # keeps the saved key
driver = webdriver.Chrome(options=options)
# First run: open the extension's settings page once and save your key.
driver.get("https://www.google.com/recaptcha/api2/demo")Wait for the token before you submit a form: the field g-recaptcha-response holds a long token when the challenge is solved.
- Fewer challenges: run the extension in CloakBrowser, a Chromium build with a real-looking fingerprint.
- No browser? Use the API directly, in sync mode for one-request answers, or the MCP server for AI agents.
- Settings: delays, auto-open, excluded sites and the Google-feedback switch are on the extension's settings page.
Only to api.solvecha.com: the challenge pictures and the task text, and after each round whether Google accepted it (you can turn this off). No page addresses, no cookies. See the privacy policy.
Website · Docs · Pricing · Support
This repository contains release builds only. © 2026 Marin Solutions UG (haftungsbeschränkt). Free to use with a Solvecha account; redistribution of modified builds is not allowed. Not affiliated with Google.