How to Solve a Text Captcha
The box above is a text captcha: a short string of distorted characters drawn into an image that you have to read and type in. This page shows three easy ways to solve it and get the right characters automatically: with the CapSkip browser extension, in your own code with the CapSkip SDK, or by routing the captcha service your tools already call to CapSkip. CapSkip reads the image with on-device OCR, so there are no per solve fees and nothing leaves your machine.
Option 1: Solve it with the browser extension
The simplest way to beat a text captcha is the CapSkip captcha solver extension for Chrome and Firefox. After a quick one-time setup that shows it which image to read and where to type, it fills in the answer for you, with no code to write.
Install the extension
Add CapSkip from the Chrome Web Store or Firefox Add-ons. It also works in Brave, Edge, Opera and Vivaldi.
Run the CapSkip app
Install and open the CapSkip desktop app. It does the solving on your own device and pairs with the extension.
Point out the captcha
Image captchas need one quick step. In CapSkip click Select on page, then click the captcha image and the answer field. You only do this once per page.
CapSkip then reads the characters and fills the field you picked, so all you do is press Verify. You can also bind it by right clicking the image (Mark as CAPTCHA Source) and the field (Insert CAPTCHA answer here). This one-time setup is only needed for image and text captchas, not reCAPTCHA or Turnstile. See the setup guide.
Option 2: Solve it with the CapSkip SDK
Building automation, a scraper or a bot? Use the CapSkip captcha solving SDK to solve text captchas from Python, Node.js, PHP or C#. You hand the captcha image to normal() and CapSkip returns the characters it reads. No site key and no page URL are needed, because CapSkip works straight from the image.
"captcha.png""https://site.com/captcha.php""data:image/png;base64,..."Before you start
CapSkip solves locally. Download and run the CapSkip desktop app and keep it open in the background. The SDK talks to it on 127.0.0.1:8080, so there are no cloud calls and no per solve fees.
Install the SDK
Add the official CapSkip client to your project.
pip install capskipnpm install capskipcomposer require capskip/capskipdotnet add package CapSkipRead the captcha image and get the characters
Pass the captcha image to normal(). It accepts a file path, an image URL, or a base64 data URI. CapSkip runs OCR on it and returns the characters as plain text.
from capskip import CapSkip
# Connect to the CapSkip app running on your machine
solver = CapSkip(host="127.0.0.1", port=8080)
# Read the distorted characters from the captcha image
result = solver.normal("captcha.png")
answer = result["code"] # the characters CapSkip read
print(answer)const { CapSkip } = require('capskip');
// Connect to the CapSkip app running on your machine
const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });
(async () => {
// Read the distorted characters from the captcha image
const result = await solver.normal('captcha.png');
const answer = result.code; // the characters CapSkip read
console.log(answer);
})();<?php
require 'vendor/autoload.php';
use CapSkip\CapSkip;
// Connect to the CapSkip app running on your machine
$solver = new CapSkip(['host' => '127.0.0.1', 'port' => 8080]);
// Read the distorted characters from the captcha image
$result = $solver->normal('captcha.png');
$answer = $result['code']; // the characters CapSkip read
echo $answer;using CapSkip;
// Connect to the CapSkip app running on your machine
var solver = new CapSkipClient(host: "127.0.0.1", port: 8080);
// Read the distorted characters from the captcha image
var result = await solver.NormalAsync("captcha.png");
string answer = result.Code; // the characters CapSkip read
Console.WriteLine(answer);You get the characters from the image, for example 5F59R, ready to type into the box.
Use the answer: type it in and verify
Put the characters into the captcha's text field and submit. On this demo the field is .captcha-input and the button is .captcha-btn, so you can fill and send it straight from the browser.
// 1. Put the recognized characters into the text field
document.querySelector('.captcha-input').value = answer;
// 2. Press the Verify button
document.querySelector('.captcha-btn').click();Using CapSkip on other text captcha sites
A text captcha is always an image of distorted characters. To solve one anywhere, grab that image and hand it to normal() in whichever form is easiest:
- From an
<img>tag: pass itssrcstraight to CapSkip as an image URL, or right click and save it as a file. - From a
<canvas>: callcanvas.toDataURL()to get a base64 string, then pass that. This demo draws its captcha on a<canvas class="captcha-text__canvas">, so base64 is the way here. - From a screenshot: capture just the captcha element and pass the saved file, or its base64.
Solve from a base64 image
When the captcha is a canvas or an inline data URI, pass the base64 string directly:
# Grab the canvas in the browser with canvas.toDataURL(), then:
result = solver.normal("data:image/png;base64,iVBORw0KGgo...")
answer = result["code"] # the characters CapSkip read// Grab the canvas in the browser with canvas.toDataURL(), then:
const result = await solver.normal('data:image/png;base64,iVBORw0KGgo...');
const answer = result.code; // the characters CapSkip read// A base64 data URI works anywhere a file path does
$result = $solver->normal('data:image/png;base64,iVBORw0KGgo...');
$answer = $result['code']; // the characters CapSkip read// A base64 data URI works anywhere a file path does
var result = await solver.NormalAsync("data:image/png;base64,iVBORw0KGgo...");
string answer = result.Code; // the characters CapSkip readNo site key or page URL is needed for a text captcha. CapSkip reads the image on your own device, so it works even on offline or internal pages.
Not using Python, Node.js, PHP or C#? The SDKs are just wrappers over the CapSkip HTTP API (the standard in.php / res.php endpoints), so you can solve text captchas from any language, framework or tool. See the Image Captcha API reference.
Option 3: Send your existing solver-service code to CapSkip
Already solving text captchas through a pay-per-captcha service such as 2Captcha, Anti-Captcha or CapMonster? You do not have to rewrite a line. The CapSkip app includes a service emulator that speaks those services' own APIs locally: pick the service you use, click Add to hosts file, and every request your bot, scraper or off-the-shelf tool already sends to it is answered by CapSkip on your own machine, for a flat price instead of a per-solve bill.
Pick your service
Open the CapSkip app and choose the service your code already talks to: 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha, SolveCaptcha or Captchas.io.
Add to hosts file
One click in the app points that service's domain at CapSkip, so the calls your tool makes are answered on your own machine instead of going out to a paid API.
Run your tool unchanged
Same API key, same request, same polling loop. CapSkip replies in that service's own format and your code gets the characters read out of the image back.
Nothing below changes when you switch. It is the same call your code makes today, except that text captchas is now solved locally and the characters read out of the image comes back from CapSkip:
POST https://2captcha.com/in.php
key=YOUR_EXISTING_API_KEY
method=base64
body=BASE64_OF_THE_CAPTCHA_IMAGE
GET https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
OK|W7H4KP the characters CapSkip readClient libraries work the same way: an Anti-Captcha style createTask / getTaskResult pair, or any wrapper built on one of these services, keeps working once the emulator is on. The full request and response reference lives in the CapSkip API docs.
More on solving text captchas
Guides for the tools and languages people usually pair with this demo.
About this text captcha demo
This page is a live text captcha demo where you can watch a classic character recognition challenge get solved in real time. A text captcha shows a short string of distorted characters drawn into an image and asks you to read them and type them back. It is one of the oldest and most common captcha types, used to block spam, fake signups and automated form submissions.
Developers, testers and automation engineers can use this text captcha test page to benchmark OCR based captcha solving, validate integrations and study how character recognition challenges are generated and checked. Whether you need to solve one text captcha or automate thousands, CapSkip is a text captcha solver that works three ways: the no-code captcha solver extension for Chrome and Firefox, and the captcha solving SDK for Python, Node.js, PHP and C#, and drop-in emulation of the captcha services you may be paying per solve today, all with unlimited solving on one flat price. All three are driven by the same desktop AI captcha solver, installed once and running on your own machine, so nothing is queued on a remote server and nothing is billed per solve.
