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.
- pip install capskip
- Sync and asyncio clients
- Python 3.10 and newer
solver = CapSkip()
token = solver.recaptcha(
sitekey = "6Le-wvkS…",
url = "example.com/signup")03AGdBq27…0.12s · $0.00One 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
# 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 formA 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
-
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
-
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
-
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.
| Feature | CapSkip | 2Captcha / CapSolver |
|---|---|---|
| Billing | One monthly price from $35, zero per-solve fees | Charged per thousand solves |
| Where the work happens | Inside the app, on hardware you run | On remote servers, sometimes by human workers |
| Cost as volume grows | Same bill at any volume | Grows with every solve and retry |
| Your data | Challenges never leave your machine | Uploaded to an outside service |
| Parallel solves | No thread limit, set by your hardware | More throughput means a bigger bill |
| Python setup | pip install capskip, or keep your 2Captcha client | The vendor's own Python client |
| Image CAPTCHA speed | About 0.1 seconds, solved locally | A network trip and a queue for each image |
Pricing
Stop paying per solve
Choose your license
Bronze License
$35/ month
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.
Related CAPTCHA solvers & guides
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?
Does the Python reCAPTCHA solver cover v3 and Enterprise too?
Do I still need my own OCR code for text CAPTCHAs?
Can I run many solves at once with asyncio?
How does CapSkip fit into a Scrapy spider?
Can I use CapSkip if my Python code runs on macOS or Linux?
What does pip install capskip pull into my environment?
Will my existing 2Captcha Python client keep working?
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.
