Solari

Captcha solving

Solari solves common captcha widgets for you: reCaptcha v2/v3, hCaptcha, and Cloudflare Turnstile. Turn it on when you launch and Solari solves the captcha automatically, in the background, from the moment the widget appears on the page. You don't write any solving code yourself.

Solving is not instant. It typically takes about 20 to 80 seconds depending on the captcha type (hCaptcha and Turnstile are usually quicker, reCaptcha v2 slower), and up to about 3½ minutes in the slow case. Wait for the response field to fill before you submit; a form submitted straight away goes out without a token.

Paid plans only
Captcha solving (which also requires stealth: true) needs a paid plan. On the Free plan the request fails with HTTP 402 (FeatureRequiresPlan).

Quick start

const browser = await client.launch({
  stealth: true,
  captcha: true,
})

const page = await browser.newPage()
await page.goto("https://www.google.com/recaptcha/api2/demo")

// Solving runs in the background. Wait for the token, then submit.
await page.waitForFunction(
  () => document.querySelector("textarea[name='g-recaptcha-response']")?.value,
  null,
  { timeout: 240_000 },
)
await page.locator("#recaptcha-demo-submit").click()

await browser.close()

Captcha solving needs stealth turned on, so set stealth: true alongside it.

Solari writes the token into the widget's response field and calls the callback only when it is set with a data-callback attribute. A callback registered in JavaScript (for example via grecaptcha.render) is not called, so read the response field when you submit.

Supported widgets

  • reCaptcha v2 (normal and invisible)
  • reCaptcha v3
  • hCaptcha
  • Cloudflare Turnstile

We also cover other providers (DataDome, PerimeterX) on a site-by-site basis. GeeTest and image-text challenges are not implemented yet. If there's a site you'd like us to support, email hello@getsolari.com.