Playwright

Playwright CAPTCHA Solver: Bypass CAPTCHAs in Node.js and Python

Playwright specs and scrapers no longer stall on reCAPTCHA, Turnstile, GeeTest v3 or image CAPTCHAs. Await a token from the Node.js or Python SDK, or let the extension clear the challenge. Every solve runs on your own machine.

Windows x64·Runs locally, so no CAPTCHA leaves your machine
  • Node.js and Python SDKs
  • Any Playwright engine
  • No per-solve billing
CAPTCHAs a month40,000
40.0k250.0k
Metered elsewhere, about $1.40 per 1,000$56.00
CapSkip Bronze, flat$35.00
$21.00stays in your pocketevery month, at this volume

A Playwright CAPTCHA solver covers the one step Playwright cannot script: its locators click, type and auto-wait, but none of them can produce the answer a reCAPTCHA, Cloudflare Turnstile or distorted-text image demands. CapSkip produces it in a desktop app that runs beside your tests, on a Windows PC or a VPS you control. A spec or scraping job that meets a challenge keeps going instead of hitting its timeout, and every solve is covered by one flat monthly license.

Both Playwright language camps are served. TypeScript and JavaScript projects add the capskip npm package and await its Promises between locator calls; Python projects use CapSkip with sync_playwright or AsyncCapSkip with async_playwright, which share method names. Solving is a plain HTTP request to the app, never a browser action, so the same helper works in Chromium, Firefox and WebKit projects. Every type CapSkip supports is open to Playwright: reCAPTCHA v2, v3 and Enterprise, Turnstile widgets and challenge pages, GeeTest v3 sliders, ALTCHA, CaptchaFox, Capy, Friendly Captcha and AWS WAF CAPTCHA, plus thousands of distorted-text images.

Audio-transcription helpers such as playwright-recaptcha only last while Google keeps offering the audio challenge, and it tends to vanish once an IP looks suspicious; a real token does not need that door open. Suites already wired to 2Captcha, Anti-Captcha or CapSolver can keep those calls too, since the app answers the same APIs locally.

Rather skip the token wiring? Start a persistent Chromium context with the CapSkip extension loaded, either headed or under the newer headless implementation, and challenges are cleared inside the page while your test waits on its next locator. The extension talks to the running CapSkip app, so keep the app open. Read the extension guide

What a Playwright project gains from CapSkip

Clients for TypeScript and Python

npm install capskip brings a Promise-based client with typings; pip install capskip brings CapSkip for sync_playwright and AsyncCapSkip for async_playwright, both with the same method names.

One helper for every browser project

The SDK sends an HTTP request to the CapSkip app and never drives the browser, so the same solve helper serves your chromium, firefox and webkit projects without a branch.

Tokens written back with page.evaluate

Read the sitekey through a locator, hand it to recaptcha() or turnstile() with page.url, then drop the answer into the hidden response field and fire the widget callback if one exists.

Solve only when a challenge appears

Give the widget locator a short timeout after each navigation and call the solver only when it resolves. Pages without a CAPTCHA keep their normal Playwright speed.

Room for every test worker

Playwright Test runs specs across parallel workers, and each can solve at the same moment. No thread cap applies and the license is flat, so more workers never mean a bigger bill.

2Captcha and CapSolver calls keep working

A suite built around 2Captcha, Anti-Captcha or CapSolver stays as written. Pick that service in the CapSkip emulator and press Add on its Hosts file row. Your own machine then answers its requests instead of a paid queue.

Three ways to bypass CAPTCHA in Playwright

Python
from playwright.sync_api import sync_playwright
from capskip import CapSkip

solver = CapSkip(host="127.0.0.1", port=8080)

with sync_playwright() as p:
    page = p.chromium.launch().new_page()
    page.goto("https://example.com/login")

    sitekey = page.get_attribute(".g-recaptcha", "data-sitekey")
    token = solver.recaptcha(sitekey=sitekey, url=page.url)["code"]

    page.evaluate(
        "t => document.getElementById('g-recaptcha-response').innerHTML = t", token
    )
    page.click("button[type=submit]")

Python with sync_playwright: read the reCAPTCHA sitekey, get the token from CapSkip on 127.0.0.1, write it into the page, then submit.

Extension in persistent Chromium

No solving code at all: Playwright launches Chromium with the CapSkip extension, and it clears widgets in the page. The same extension runs in everyday Chrome and Firefox.

SDKs for Node.js, Python and .NET

Await one call per CAPTCHA type from TypeScript or Python, or use the .NET client under Playwright for .NET. Each result comes back ready to inject.

Local API for the code you have

Existing 2Captcha-style requests are answered by the app, so older specs keep running. Playwright for Java, or any other binding, can call the HTTP API directly.

Aim a Playwright script at a live widget

Our reCAPTCHA v2 demo loads a real Google widget. Point your Playwright script at it, run the solve step, and confirm the form accepts the token before you go near your own targets.

Set up the Playwright CAPTCHA solver in three steps

  1. Install the app on a reachable machine

    Install CapSkip next to your test runner on Windows, or on any VPS your CI jobs can reach across the network, then start it and let it idle until the first solve arrives. Get the Windows installer

  2. Sign in with a license or trial

    Your login details arrive by email after you subscribe; enter them in the app. To test first, the trial gives 3 days and 500 solves on one device, no card needed. Start the free trial

  3. Wire the solve step into your tests

    Install the npm or pip package, wrap the client in a helper or fixture, and call it wherever a challenge can show up. Method names and options are on the SDK page. Open the SDK guide

CapSkip vs per-solve APIs inside a Playwright suite

The rows below follow what changes for a Playwright suite when solving moves from a paid API to your own machine.

FeatureCapSkip2Captcha & API services
How you payUnlimited solves for a flat $35 a month and upCredits charged per thousand solves, rising with every run
Where the solve happensOn a Windows box or VPS you controlIn a provider cloud or by paid human workers
Playwright languagesNode.js and Python SDKs, .NET client, local HTTP APITheir client libraries plus an API key
Parallel test workersNo thread cap, bounded only by your hardwareConcurrency limits or extra fees
Specs written for 2CaptchaKeep running through the built-in emulatorLocked to that API and its prepaid balance
Image CAPTCHA turnaroundAbout 0.1 seconds, no trip over the internetNetwork and queue delay on each solve
Challenge dataNever leaves the solving machineUploaded to an outside service each time

Pricing

Stop paying per solve

Choose your license

Bronze License

$35/ month

Subscribe to Bronze

Instant license activation

Billed monthly. Cancel from your account whenever you like.

Same features. More machines, more throughput.

Every machine solves as fast as its own CPU and memory allow. More machines run more threads at the same time, so Silver solves twice as many CAPTCHAs at once and Gold three times as many.

  • Unlimited solving, no daily cap
  • Unlimited threads, speed scales with your hardware
  • 90% to 100% recognition accuracy
  • Drop-in replacement for the major solving service APIs
  • Works with almost any tool, no coding required
  • REST API, SDKs and a browser extension
  • Free training when a new CAPTCHA type appears
  • Runs on your machine, nothing leaves it

Every CAPTCHA type CapSkip solves is on every license. See the coverage band

Just want to try it first?

Start with a free 3-day trial and solve 500 CAPTCHAs of any type on your own targets.

Start the free trial

How to handle CAPTCHA in Playwright, step by step

Start by choosing where the solve lives. Playwright offers two clean spots: inside the browser, through the CapSkip extension, or inside your test code, through the SDK. Both work from Node.js and Python, and one repository can use each where it fits.

Inside the browser. Launch a persistent Chromium context that loads the extension, headed or in Chromium's new headless mode, because the old headless shell refuses extensions. It notices a reCAPTCHA, Turnstile or GeeTest v3 widget as soon as one renders and solves it while your next locator waits. For an image CAPTCHA, mark the picture and its input box in the extension once.

Inside your code. Pull the sitekey off the widget with a locator, send it along with page.url to the SDK, then use page.evaluate to set the hidden field the site reads: g-recaptcha-response for reCAPTCHA, cf-turnstile-response for Turnstile. Call the widget callback when the page declares one, then submit. Google lets a reCAPTCHA token live for roughly two minutes, so solve right before the submit, not at the top of the test.

Keep clean pages fast. After each navigation, give the widget locator a short timeout and skip the solve when nothing shows up. Suites that log in can solve the login challenge once in a setup project, save storageState, and start every later test already signed in.

Coming from a paid service? On the machine that runs CapSkip, pick 2Captcha or Anti-Captcha in the emulator settings, then let the app list that service in the Windows hosts file with a single click. Your Playwright calls stay as written and every supported CAPTCHA is solved locally.

Related guides: Patchright CAPTCHA · Camoufox CAPTCHA · Crawlee CAPTCHA

How do I bypass CAPTCHA in Playwright without writing solving code?
Give Playwright a persistent Chromium context with the CapSkip extension inside, and leave the CapSkip app running. The extension spots reCAPTCHA, Turnstile and GeeTest v3 widgets and solves them on the page, so your script only waits for the next element. Image CAPTCHAs take one extra setup step: point the extension at the picture and the box where its answer goes.
Which Playwright browsers work with CapSkip?
All three, on the SDK route. Solving is an HTTP call from your test process to the app, so Chromium, Firefox and WebKit behave the same. The extension route differs: Playwright loads extensions only into Chromium, so keep a Chromium project for no-code runs and use the SDK everywhere else.
Does it fit Playwright Test with many parallel workers?
Yes. Create the client in a worker-scoped fixture or a shared helper and every worker can solve at the same time. CapSkip sets no thread limit, so throughput depends only on how much the solving machine can handle, and adding workers never changes what you pay each month.
Can I solve invisible reCAPTCHA and reCAPTCHA v3 from Playwright?
Yes. Pass the invisible flag for an invisible v2 widget; for v3, send the version along with the action the site names in its own call. CapSkip returns a token either way, but Google still scores v3 traffic by its IP and browser fingerprint, so no solver can promise a score; a clean proxy helps most.
Will headless mode stop CapSkip from working?
Not for the SDK, which never asks the browser to solve anything, so headless runs in CI behave like headed ones. Only the extension cares: it needs a headed browser or Chromium's new headless mode, since the legacy headless build has no extension support.
How do I get Playwright through Cloudflare Turnstile?
Read the sitekey from the Turnstile widget, call turnstile() with it and page.url, and set the token in the cf-turnstile-response field before you submit. CapSkip also clears the whole-page Cloudflare check; there the answer includes the user agent it was solved with, so keep that browser context on the same user agent.
Can my Playwright suite keep its 2Captcha or Anti-Captcha calls?
Yes. Turn on the matching emulator in CapSkip and press Add on its Hosts file row. Requests your code sends to that service are then answered by the app instead. Nothing in the spec changes and no balance is spent. Run the tests on the CapSkip machine, since the hosts file only affects that computer.
Is playwright-recaptcha or a stealth patch enough on its own?
Usually not for long. Audio-based packages like playwright-recaptcha stop working when Google withholds the audio challenge, which often happens to flagged IPs. Stealth patches and builds such as Patchright make challenges rarer but never solve one. Keep stealth if you like it and let CapSkip answer whatever still gets through.

Let your Playwright runs finish green

Install CapSkip, add one solve step or the extension, and the specs that used to stall on a challenge reach their last assertion. Unlimited solves on one flat monthly plan.