Selenium CAPTCHA Solver for Python and WebDriver Scripts
A reCAPTCHA, a Turnstile check, a GeeTest v3 slider or a warped image should not end a WebDriver session. Give the browser the CapSkip extension or call the SDK from your test, and every solve runs locally with no meter.
- Python, C# and Node.js
- Extension or SDK route
- Selenium Grid friendly
- open /signup
- fill the form
- solve the CAPTCHA
- submit
4 passed0 blockedSooner or later a WebDriver run hits a login, search or sign-up form guarded by a challenge, and that is where a Selenium CAPTCHA solver comes in. Selenium can locate elements, click and type, yet it cannot produce a reCAPTCHA token or read warped letters, so the test stalls and the report fills with timeouts. CapSkip sits beside the driver, on the same Windows computer, or on a VPS that the script can reach, and hands back the answer while the browser waits.
There are two ways to wire it in, and they suit different Selenium habits. The no-code route launches a Chrome or Firefox profile that already carries the CapSkip extension, so widgets clear inside the page as if a person had ticked them. The scripted route keeps control in your test: pip install capskip, read the sitekey with find_element, call solver.recaptcha() or solver.turnstile(), and write the token back with execute_script. Image CAPTCHAs return as text in about 0.1 seconds.
On the token side CapSkip covers reCAPTCHA v2, v3 and Enterprise plus Cloudflare Turnstile. GeeTest v3 slides, Capy puzzles, CaptchaFox and AWS WAF CAPTCHA are included too, as are the proof-of-work checks behind ALTCHA and Friendly Captcha. Image CAPTCHAs span thousands of variants, and hCaptcha is covered too, invisible and Enterprise widgets included. FunCaptcha and GeeTest v4 are not supported. Nothing is metered, so a nightly regression that trips hundreds of challenges is billed exactly like one that trips none.
Your driver code can stay as it is. Put the CapSkip extension into a browser profile, start Selenium with that profile while the app runs, and challenges clear on their own as your explicit waits tick. Switch to the SDK only when a test needs the answer in hand. Read the extension guide
What the Selenium CAPTCHA solver does for WebDriver
A solving profile for Chrome or Firefox
Install the extension once in a dedicated Chrome profile and hand it to the driver with user-data-dir, or load the Firefox add-on via install_addon(). Every window Selenium opens can then solve, as long as the app is running.
Token calls from the same test file
Read data-sitekey with find_element, pass it plus driver.current_url to solver.recaptcha(), and set g-recaptcha-response through execute_script. The browser stays under your script while the app works.
Image text taken from the live element
Grab the picture with screenshot_as_base64 and send it to solver.normal(). Since nothing requests the image twice, the text you type with send_keys matches what this session was shown.
Pairs with undetected-chromedriver
Stealth drivers such as undetected-chromedriver and SeleniumBase UC mode make challenges rarer. CapSkip clears the ones that still slip through, so the two tools cover different halves of the problem.
Old 2Captcha helpers keep running
Helpers you built around 2Captcha or Anti-Captcha need no edits. Choose that service as the emulator in the app, click Add beside Hosts file, and CapSkip answers those calls itself.
Parallel drivers on one subscription
Run as many WebDriver instances as the machine can hold. Threads are never capped by the plan, and a suite that meets hundreds of challenges adds nothing to the monthly bill.
Pick how your WebDriver code reaches CapSkip
from selenium import webdriver
from capskip import CapSkip
driver = webdriver.Chrome()
driver.get("https://example.com/login")
solver = CapSkip(host="127.0.0.1", port=8080)
sitekey = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-sitekey")
token = solver.recaptcha(sitekey=sitekey, url=driver.current_url)["code"]
# Inject the token and submit
driver.execute_script(
"document.getElementById('g-recaptcha-response').innerHTML = arguments[0];",
token,
)
driver.find_element("css selector", "button[type=submit]").click()Python Selenium: read the sitekey from the widget, ask CapSkip for a token, write it into the response field and click submit.
Extension inside the Selenium profile
Load the Chrome or Firefox extension into the profile Selenium launches. Widgets are solved in place, so your test carries no solving code at all.
SDK calls next to your locators
Python, Node.js, PHP and C# clients hand back tokens and image text ready for execute_script or send_keys in the WebDriver binding you use.
Local API for every other binding
Java and other bindings without an SDK can call the HTTP API directly, and Selenium code built for 2Captcha style services works once the emulator is on.
Try your Selenium script on a live reCAPTCHA
Aim your WebDriver at our reCAPTCHA v2 demo page, run the solve step against the real Google widget, and watch the form accept the token before you point it at your own targets.
Get CapSkip ready beside your Selenium suite
-
Install CapSkip on the test machine
Install CapSkip on the Windows desktop or VPS that executes your WebDriver scripts, or on any box those scripts can reach over the network, and keep it running while tests run. Download the installer
-
Activate a plan or the free trial
Use the login details emailed with your order to sign in to CapSkip. The trial gives one device three days and 500 solves, enough to run a suite against real targets. Start the free trial
-
Add the solve step to your driver
Either launch Selenium with the extension profile, or pip install capskip and call the solver wherever a challenge interrupts your flow. Every method and option is documented. Open the API docs
Local solving vs per-solve APIs inside Selenium
How CapSkip and services such as 2Captcha differ once your Selenium runs meet challenges every day.
| Feature | CapSkip | 2Captcha & API services |
|---|---|---|
| What a full test run costs | The same monthly plan from $35, however many solves | Every solve billed, so a bigger suite means a bigger bill |
| Where the challenge is solved | On the machine driving your browsers, or a VPS | On remote servers, often by human workers |
| Image CAPTCHA turnaround | About 0.1 seconds, no trip across the internet | Several seconds, plus a network round trip per image |
| Code you already wrote for 2Captcha | Keeps working through the built-in emulator | Tied to that vendor API and its balance |
| Session screenshots and challenge data | Stay on your own machine | Sent to a third-party service for every solve |
| Parallel WebDriver sessions | No thread cap from the plan, only your hardware | Extra concurrency often costs more |
| Ways to plug into Selenium | Extension profile, Python or .NET client, or plain HTTP calls | API key, prepaid credits and their own client |
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
Solve reCAPTCHA with Selenium Python: extension or SDK
Selenium gives you two dependable options when a CAPTCHA blocks the flow: let a browser extension finish the challenge inside the page, or solve it from your script and inject the answer. Both rely on the CapSkip app running somewhere your test can reach, and the right one depends on how much control the test needs.
The extension route. Create a Chrome profile, install the CapSkip extension in it, and start webdriver.Chrome with that profile through the user-data-dir argument; for Firefox, call driver.install_addon() with the add-on file. Run headed or with --headless=new, since the old headless mode loads no extensions. Widgets for reCAPTCHA, Turnstile and GeeTest v3 are then handled in place, and your WebDriverWait only has to wait for the form to move on.
The SDK route. Install the client with pip install capskip (Python 3.10 or newer) and build one solver for the whole session, aimed at 127.0.0.1 and port 8080 by default. For reCAPTCHA, take data-sitekey from the .g-recaptcha element, or the k value in the src of the reCAPTCHA iframe when JavaScript renders the widget, then call solver.recaptcha() with driver.current_url. An invisible widget needs invisible=1, while v3 wants version v3 plus the action string the page passes when it runs the check. Set g-recaptcha-response with execute_script, run the data-callback if the widget names one, and submit inside two minutes. For Turnstile, swap in solver.turnstile() and the hidden cf-turnstile-response field; the rest of the flow is unchanged.
For a Python Selenium CAPTCHA image solver step, read screenshot_as_base64 from the img element, pass that string to solver.normal() with a data:image/png;base64 prefix, and type the result with send_keys. Never fetch the image URL again: most image CAPTCHAs belong to the session, and a second request draws a new picture. Hand CapSkip the proxy your browser uses (HTTP, HTTPS, SOCKS5 or SOCKS5h) for reCAPTCHA and Turnstile; image solves need none.
Related guides: undetected-chromedriver CAPTCHA · SeleniumBase CAPTCHA · Selenium Grid CAPTCHA
What is the fastest way to solve reCAPTCHA with Selenium in Python?
Should my Selenium project use the extension or the SDK?
How do I get the extension into the browser Selenium opens?
How does Selenium pass an image CAPTCHA to CapSkip?
Does it handle Cloudflare Turnstile, including the full-page check, in Selenium?
The form still refuses my injected token. What usually went wrong?
Can I call CapSkip from Selenium in C#, Node.js or Java?
Does the solver work with headless Chrome and Selenium Grid?
Let your Selenium suite finish every run
Install CapSkip next to your driver, sign in, and choose the extension or the SDK. Your next WebDriver run clears its CAPTCHAs locally, and the monthly bill stays put whatever the suite runs into.
