Browser extension

Tools

Install the Solvecha extension for Chrome and use it in Playwright, Puppeteer and Selenium. It solves reCAPTCHA v2 image challenges in the page.

On this page

The Solvecha extension reads a reCAPTCHA v2 image challenge, asks the API, clicks the tiles and presses Verify. It works in Chrome and Chromium, and in Playwright, Puppeteer and Selenium when you load it as an unpacked extension.

Version 0.1.1 is the current public build. It solves reCAPTCHA v2 image challenges only. Text captchas, GeeTest and FunCAPTCHA are not covered by the extension. For these types call the API directly.

#What it does

Feature State
reCAPTCHA v2 image challenges, 3x3 and 4x4 Yes
Dynamic 3x3 grids (new pictures after a click) Yes. New tiles go to the API as 1x1.
Click "I'm not a robot" for you Yes, can be turned off
Click tiles, press Verify, repeat on a new round Yes, up to a set number of rejected rounds
Feedback to Solvecha: did Google accept the answer Yes, can be turned off
Popup with key check, daily quota and today's counts Yes

Each answer counts against your daily quota like any other API request.

#Install in Chrome

  1. Download the zip from the extension page or directly from https://solvecha.com/download/extension/chrome, and unzip it into a folder.
  2. Open chrome://extensions and switch on Developer mode.
  3. Click Load unpacked and choose the folder.
  4. Open the extension's Settings, paste your key from the dashboard and click Save and check.

Chrome shows a developer-mode notice for unpacked extensions. The Chrome Web Store and Firefox Add-ons versions are coming soon.

Check the download with sha256sum solvecha-extension-chrome-0.1.1.zip. The expected SHA-256 is 2983f3e2b8a3a75f77505994019518da7ec49fdbf713bf3858f1668c90b1530f.

#Settings

Open the extension's Settings page for these options: your API key, on or off, delays between actions, the number of rejected rounds before it gives up, sites to skip, and a light or dark theme.

#Playwright, Puppeteer and Selenium

Extensions need a headed browser or a virtual display such as xvfb-run. Load the unzipped folder and save your key once. Use Chromium, Chrome for Testing or the Chromium that Playwright installs. Google Chrome 137 and newer ignores --load-extension.

Playwright

Playwright
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.

Puppeteer

Puppeteer
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");

Selenium

Selenium
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 the form. On Google's demo page the field g-recaptcha-response holds a long token when the challenge is solved. The page Using with CloakBrowser has a complete script with this wait.

#What the extension sends

  • To get an answer it sends the challenge pictures, the task text and your key to https://api.solvecha.com. Nothing else is contacted.
  • After each round it can send Google's verdict, accepted or rejected, with the job id and the grid size, to POST /v1/feedback. It sends no pictures and no page address. You can switch this off in the settings.
  • Your key stays in the extension storage (chrome.storage.local). Content scripts never see it.
  • Permissions: storage, access to https://api.solvecha.com, and content scripts on the reCAPTCHA frames of google.com and recaptcha.net. The extension does not run on other pages.

Read the Privacy Policy for how we handle the data.

Solvecha is an independent service. It is not affiliated with NopeCHA, 2Captcha, CapSolver, Google or CloakHQ. Their names describe compatibility or recommendations only. Figures come from our own tests, see the compare page.

    ↑↓ to moveEnter to open