Python SDK

Python CAPTCHA Solver: Solve CAPTCHAs in Python Scripts and Scrapers

pip install capskip, call one method per CAPTCHA type from plain or asyncio code, and receive tokens or text from a CapSkip app running on hardware you control. No meter runs on any of it.

Windows x64·Runs locally, so no CAPTCHA leaves your machine
  • pip install capskip
  • Sync and asyncio clients
  • Python 3.10 and newer
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

One pip install capskip turns any script into a Python CAPTCHA solver: hand it a reCAPTCHA, a Cloudflare Turnstile box, a GeeTest v3 slider or a smudged text image, and it returns a token or the characters to submit. The actual solving happens locally, in a Windows desktop app that you install on a workstation or VPS, which means nothing waits in a remote queue and no call carries its own fee.

The SDK keeps one method per challenge family. recaptcha() takes Enterprise, v3, and the v2 checkbox and invisible variants; turnstile() handles the widget and also the whole-page Cloudflare check; geetest() works from the gt and challenge pair; normal() reads image CAPTCHAs whether you give it a saved file, a link to the picture or base64 data. For the less common types, friendly_captcha(), captchafox(), capy(), altcha() and amazon_waf() follow the same calling style.

Two clients share those method names. CapSkip blocks the way requests does and suits Selenium or a quick script, while AsyncCapSkip makes each solve a coroutine you can gather by the dozen in an httpx or async Playwright crawler. The plan is flat, from $35 a month, so a retry loop that fires a thousand times costs exactly what a single call costs.

Size your timeouts per CAPTCHA type. A text image comes back in about 0.1 seconds. For reCAPTCHA, Cloudflare Turnstile and GeeTest the app opens a real browser behind the scenes, so expect roughly 3 to 10 seconds for the first two and about 7 to 12 for the slider. Give those calls more room in your timeouts and worker pools.

What pip install capskip adds to your Python code

One method per CAPTCHA family

recaptcha(), turnstile(), geetest(), normal() and the four smaller solvers share one calling style. Pass an argument a type does not accept and ValidationException tells you at once, instead of a quiet failure at the site.

Blocking or asyncio, same names

CapSkip fits requests code and Selenium sessions. AsyncCapSkip turns every solve into a coroutine, so a single event loop can await many CAPTCHAs side by side without extra threads.

Text CAPTCHAs as plain strings

normal() turns a distorted picture into characters within roughly 0.1 seconds. No browser opens and no proxy is needed, so the OCR step never becomes the slow part of a scraper.

Sits beside Selenium, Playwright, Scrapy

The SDK leaves the browser alone. Your tool finds the sitekey, CapSkip returns the answer, and you place it in the open page or send it along with a form post.

Exceptions shaped for retry logic

NetworkException, TimeoutException, ApiException and ValidationException all inherit from CapSkipError, so one except clause can catch everything, or you can treat each kind of failure differently.

Loops and retries cost nothing extra

A flat monthly license covers every call your scripts make, so a retry loop, a rejected form post or a crawl that runs all weekend never adds a per-solve charge.

From a browser add-on to a pip package: three routes

Python
# pip install capskip
from capskip import CapSkip

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

# recaptcha() covers v2, v3 and Enterprise; turnstile(), geetest()
# and normal() (image CAPTCHAs) follow the same pattern.
result = solver.recaptcha(
    sitekey="YOUR_SITEKEY",
    url="https://example.com/page-with-recaptcha",
)

print(result["code"])   # token, inject it and submit the form

A minimal blocking example: connect to the app, pass the sitekey and page URL to recaptcha(), and read the token from result['code'] before you submit.

Extension for hands-on browsing

A Chrome and Firefox add-on that solves CAPTCHAs inside the page with no code, handy while you explore a target by hand before you script it. It needs the app running.

The capskip package and its siblings

pip install capskip gives Python a blocking and an async client. Official SDKs for Node.js, PHP and .NET cover the other parts of a mixed stack.

Local API for code you already have

Old 2Captcha or Anti-Captcha Python code can talk to CapSkip through the service emulator, and anything that speaks HTTP, even bare requests calls, can use the local API.

Try the SDK on a live reCAPTCHA demo

Before you aim a script at a real site, run it against our hosted reCAPTCHA v2 demo page. It loads the genuine widget, so you can confirm your sitekey handling and token submission work end to end.

From installer to your first solve in Python

  1. Install the CapSkip app

    Install CapSkip on whichever Windows PC or VPS will do the solving. Your Python code can live on that machine or anywhere that reaches it over the network. Download the installer

  2. Activate a plan or the trial

    Buy Bronze, Silver or Gold (they differ only in how many devices you get), or take the free trial. CapSkip emails your sign-in details, which go straight into the login screen of the app. Compare the plans

  3. Install the package and call it

    Inside your virtualenv, run pip install capskip, create a client that points at the app's address and port, and call the method that matches your CAPTCHA. Read the SDK guide

Local or metered Python CAPTCHA solver: CapSkip vs 2Captcha and CapSolver

All three answer CAPTCHAs for your Python code. The difference is who does the work, where your data goes and how the bill behaves when a crawler runs all night.

FeatureCapSkip2Captcha / CapSolver
BillingOne monthly price from $35, zero per-solve feesCharged per thousand solves
Where the work happensInside the app, on hardware you runOn remote servers, sometimes by human workers
Cost as volume growsSame bill at any volumeGrows with every solve and retry
Your dataChallenges never leave your machineUploaded to an outside service
Parallel solvesNo thread limit, set by your hardwareMore throughput means a bigger bill
Python setuppip install capskip, or keep your 2Captcha clientThe vendor's own Python client
Image CAPTCHA speedAbout 0.1 seconds, solved locallyA network trip and a queue for each image

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

Solving CAPTCHAs in Python: requests scripts, browsers and Scrapy

Where the CAPTCHA shows up decides how you wire the solver in, and Python code tends to meet it in one of three places.

Plain HTTP scripts. If you fetch pages with requests or httpx, you need no browser at all. Pull the sitekey out of the HTML you already downloaded, ask CapSkip for a token with the page URL, then post the token with the rest of the form fields. Keep the same session so cookies stay consistent, and submit promptly, because reCAPTCHA tokens go stale roughly two minutes after they are created.

Selenium and Playwright scripts. The SDK never controls the browser; it only produces the answer. Your script reads the sitekey from the open page, waits for the solve, writes the token into the hidden answer field of the page using a one-line JavaScript call, and clicks submit. With async Playwright, AsyncCapSkip lets one tab wait on its CAPTCHA while the others keep working.

Scrapy spiders and asyncio crawlers. A spider can read the sitekey with a CSS or XPath selector, solve it, and yield a FormRequest that carries the token. For a big async crawl, gather many solves together with return_exceptions=True, so one bad challenge does not cost you the other results. From there, how fast the crawl goes is a question of hardware on the CapSkip machine, not of a plan limit.

Related guides: Selenium CAPTCHA solver · Playwright CAPTCHA solver · parallel CAPTCHA solving in Python

How do I solve a CAPTCHA automatically in Python?
Start the CapSkip app, install the package with pip install capskip, and create a client pointed at the app's address and port. Then call the method for the challenge in front of you: recaptcha() gets the sitekey plus the URL of the page, normal() gets an image. The answer lands in result['code'], ready to submit.
Does the Python reCAPTCHA solver cover v3 and Enterprise too?
Yes. recaptcha() handles the v2 checkbox, invisible and callback variants, plus v3 and Enterprise. For v3, include the action label your target page uses, then submit the token the same way you would for v2. No particular v3 score is promised: the result depends on the site, your IP and your pacing.
Do I still need my own OCR code for text CAPTCHAs?
No. Hand normal() a saved file, a link to the image, a base64 string or a data URI. The recognized characters arrive in result['code'] almost at once, about 0.1 seconds per image, and you have no model to train or tune. If an unusual image type reads badly, CapSkip trains it for free.
Can I run many solves at once with asyncio?
Yes. AsyncCapSkip mirrors the method names of the blocking client, but each solve is a coroutine, so asyncio.gather can keep dozens in flight from one event loop. Add return_exceptions=True and a failed solve comes back as an exception object in the results list instead of being raised, so you still get every other answer.
How does CapSkip fit into a Scrapy spider?
Scrapy needs no browser for this. In your parse method, read the sitekey from the response with a CSS or XPath selector, solve it through the SDK, and yield a FormRequest that carries the token, named the way the target form wants it. Image CAPTCHAs follow the same pattern with normal().
Can I use CapSkip if my Python code runs on macOS or Linux?
Yes. Only the CapSkip app needs Windows. Install it on a Windows desktop or a Windows VPS, switch on server mode so it listens on the network, and create your client with that machine's address as host. Your script can then stay on a Mac, a Linux server or wherever it already runs.
What does pip install capskip pull into my environment?
The package needs Python 3.10 or newer. It brings in requests for the blocking client and httpx for the async one, which most scraping projects already have. It is MIT licensed, so it fits private projects, company code and CI pipelines alike.
Will my existing 2Captcha Python client keep working?
Yes, provided the client and CapSkip share one Windows computer. Switch CapSkip to its 2Captcha emulator and press the Add button next to Hosts file; the requests your current library sends to 2Captcha are then answered locally, for the CAPTCHA types CapSkip supports. Anti-Captcha, CapSolver and the other emulated services work the same way.

Give your Python scripts unmetered CAPTCHA solving

Install the app, run pip install capskip and point your first recaptcha() or normal() call at it. Every solve after that, one or a million, sits on the same monthly plan.