Use the Java captcha solver to automatically bypass any captcha — including reCAPTCHA v2, Invisible, v3, Enterprise, Cloudflare Turnstile, GeeTest sliders, Amazon AWS WAF, FunCaptcha, and both image and text-based captchas.
To get started quickly, check out the captcha solver API documentation.
Helpful links:
- reCAPTCHA v2 solver
- reCAPTCHA v3 solver
- Text and image captcha solver
- Cloudflare captcha solver (Turnstile)
- Amazon captcha solver (AWS WAF)
- GeeTest solver
- FunCaptcha (Arkose Labs) solver
- Other types
- Fast and fully automated captcha solving
- Native support for Java 8+
- Works with HttpURLConnection, Apache HttpClient, OkHttp, or - Spring WebClient
- Easily integrates into Spring Boot, Jakarta EE, or standalone - Java apps
- Async-friendly architecture using Futures, - CompletableFutures, or reactive streams
- Pay only for successful solves
- 99.9% uptime
- 24/7 developer support
- Accessibility
- Web scraping behind protected pages
- Automating form submissions in enterprise Java applications
- Background captcha solving in scheduled jobs or microservices
- QA pipelines with captcha bypass
- Security testing and anti-bot evaluation
Need help integrating with your Go project? Open an issue or fork this repo to contribute.
- Java captcha solver: Bypass reCAPTCHA, Cloudflare, Amazon and More
- Get in touch
- License
(Coming soon) solveaptcha-java artifact is available in Maven Central
You can install the library directly from GitHub using JitPack:
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}dependencies {
implementation 'com.github.solvercaptcha:solvecaptcha-java:1.0.0'
}
Replace 1.0.0 with the latest version tag from the releases.
solvecaptcha instance can be created like this:
solvecaptcha solver = new solvecaptcha('YOUR_API_KEY');Also there are few options that can be configured:
solver.setHost("solvecaptcha.com");
solver.setDefaultTimeout(120);
solver.setRecaptchaTimeout(600);
solver.setPollingInterval(10);
solver.setExtendedResponse(1);| Option | Default value | Description |
|---|---|---|
| host | solvecaptcha.com |
API server. You can set it to solvecaptcha.com if your account is registered there |
| defaultTimeout | 120 | Polling timeout in seconds for all captcha types except ReCaptcha. Defines how long the module tries to get the answer from res.php API endpoint |
| recaptchaTimeout | 600 | Polling timeout for ReCaptcha in seconds. Defines how long the module tries to get the answer from res.php API endpoint |
| pollingInterval | 10 | Interval in seconds between requests to res.php API endpoint, setting values less than 5 seconds is not recommended |
| extendedResponse | 0 | Json or String format response from res.php API endpoint, extendedResponse = 1 returns JSON format response |
To get the answer manually use getResult method
Tip
Use the extendedResponse(1) setting to obtain an extended response for the captcha. When using extendedResponse(1), the response will be presented as a JSON string. Utilizing the extended response extendedResponse(1) will be helpful when solving captchas such as ClickCaptcha.
When you submit any image-based captcha use can provide additional options to help SolveCaptcha workers to solve it properly.
| Option | Default Value | Description |
|---|---|---|
| numeric | 0 | Defines if captcha contains numeric or other symbols see more info in the API docs |
| minLength | 0 | minimal answer lenght |
| maxLength | 0 | maximum answer length |
| phrase | 0 | defines if the answer contains multiple words or not |
| caseSensitive | 0 | defines if the answer is case sensitive |
| calc | 0 | defines captcha requires calculation |
| lang | - | defines the captcha language, see the list of supported languages |
| hintImg | - | an image with hint shown to workers with the captcha |
| hintText | - | hint or task text shown to workers with the captcha |
Below you can find basic examples for every captcha type. Check out examples directory to find more examples with all available options.
Example below shows a basic solver call example with error handling.
Normal captcha = new Normal();
captcha.setFile("path/to/captcha.jpg");
captcha.setMinLen(4);
captcha.setMaxLen(20);
captcha.setCaseSensitive(true);
captcha.setLang("en");
try {
solver.solve(captcha);
System.out.println("Captcha solved: " + captcha.getCode());
} catch (Exception e) {
System.out.println("Error occurred: " + e.getMessage());
}To bypass a normal captcha (distorted text on image) use the following method. This method also can be used to recognize any text on the image.
Normal captcha = new Normal();
captcha.setFile("path/to/captcha.jpg");
captcha.setNumeric(4);
captcha.setMinLen(4);
captcha.setMaxLen(20);
captcha.setPhrase(true);
captcha.setCaseSensitive(true);
captcha.setCalc(false);
captcha.setLang("en");
captcha.setHintImg(new File("path/to/hint.jpg"));
captcha.setHintText("Type red symbols only");This method can be used to bypass a captcha that requires to answer a question provided in clear text.
Text captcha = new Text();
captcha.setText("If tomorrow is Saturday, what day is today?");
captcha.setLang("en");Use this method to solve ReCaptcha V2 and obtain a token to bypass the protection.
ReCaptcha captcha = new ReCaptcha();
captcha.setSiteKey("6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-");
captcha.setUrl("https://mysite.com/page/with/recaptcha");
captcha.setInvisible(true);
captcha.setEnterprise(true);
captcha.setAction("verify");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");This method provides ReCaptcha V3 solver and returns a token.
ReCaptcha captcha = new ReCaptcha();
captcha.setSiteKey("6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-");
captcha.setUrl("https://mysite.com/page/with/recaptcha");
captcha.setVersion("v3");
captcha.setEnterprise(false);
captcha.setAction("verify");
captcha.setScore(0.3);
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");FunCaptcha (Arkoselabs) solving method. Returns a token.
FunCaptcha captcha = new FunCaptcha();
captcha.setSiteKey("69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC");
captcha.setUrl("https://mysite.com/page/with/funcaptcha");
captcha.setSUrl("https://client-api.arkoselabs.com");
captcha.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
captcha.setData("anyKey", "anyValue");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");Method to solve GeeTest puzzle captcha. Returns a set of tokens as JSON.
GeeTest captcha = new GeeTest();
captcha.setGt("f2ae6cadcf7886856696502e1d55e00c");
captcha.setApiServer("api-na.geetest.com");
captcha.setChallenge("12345678abc90123d45678ef90123a456b");
captcha.setUrl("https://mysite.com/captcha.html");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");Method to solve GeeTestV4 puzzle captcha. Returns a set of tokens as JSON.
GeeTestV4 captcha = new GeeTestV4();
captcha.setCaptchaId("72bf15796d0b69c43867452fea615052");
captcha.setApiServer("api-na.geetest.com");
captcha.setChallenge("12345678abc90123d45678ef90123a456b");
captcha.setUrl("https://mysite.com/captcha.html");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");Token-based method to solve KeyCaptcha.
KeyCaptcha captcha = new KeyCaptcha();
captcha.setUserId(10);
captcha.setSessionId("493e52c37c10c2bcdf4a00cbc9ccd1e8");
captcha.setWebServerSign("9006dc725760858e4c0715b835472f22");
captcha.setWebServerSign2("2ca3abe86d90c6142d5571db98af6714");
captcha.setUrl("https://www.keycaptcha.ru/demo-magnetic/");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");Token-based method to bypass Capy puzzle captcha.
Capy captcha = new Capy();
captcha.setSiteKey("PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v");
captcha.setUrl("https://www.mysite.com/captcha/");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");Grid method is originally called Old ReCaptcha V2 method. The method can be used to bypass any type of captcha where you can apply a grid on image and need to click specific grid boxes. Returns numbers of boxes.
Grid captcha = new Grid();
captcha.setFile("path/to/captcha.jpg");
captcha.setRows(3);
captcha.setCols(3);
captcha.setPreviousId(0);
captcha.setCanSkip(false);
captcha.setLang("en");
captcha.setHintImg(new File("path/to/hint.jpg"));
captcha.setHintText("Select all images with an Orange");Canvas method can be used when you need to draw a line around an object on image. Returns a set of points' coordinates to draw a polygon.
Canvas captcha = new Canvas();
captcha.setFile("path/to/captcha.jpg");
captcha.setPreviousId(0);
captcha.setCanSkip(false);
captcha.setLang("en");
captcha.setHintImg(new File("path/to/hint.jpg"));
captcha.setHintText("Draw around apple");ClickCaptcha method returns coordinates of points on captcha image. Can be used if you need to click on particular points on the image.
Coordinates captcha = new Coordinates();
captcha.setFile("path/to/captcha.jpg");
captcha.setLang("en");
captcha.setHintImg(new File("path/to/hint.jpg"));
captcha.setHintText("Select all images with an Orange");This method can be used to solve a captcha that asks to rotate an object. Mostly used to bypass FunCaptcha. Returns the rotation angle.
Rotate captcha = new Rotate();
captcha.setFile("path/to/captcha.jpg");
captcha.setAngle(40);
captcha.setLang("en");
captcha.setHintImg(new File("path/to/hint.jpg"));
captcha.setHintText("Put the images in the correct way up");This method can be used to solve a audio captcha
solvecaptcha solver = new Solvecaptcha(args[0]);
byte[] bytes = Files.readAllBytes(Paths.get("src/main/resources/audio-en.mp3"));
String base64EncodedImage = Base64.getEncoder().encodeToString(bytes);
Audio captcha = new Audio();
captcha.setBase64(base64EncodedImage);Use this method to solve Yandex and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
Yandex captcha = new Yandex();
captcha.setSiteKey("Y5Lh0tiycconMJGsFd3EbbuNKSp1yaZESUOIHfeV");
captcha.setUrl("https://rutube.ru");Use this method to solve Lemin and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
Lemin captcha = new Lemin();
captcha.setСaptchaId("CROPPED_d3d4d56_73ca4008925b4f83a8bed59c2dd0df6d");
captcha.setUrl("http://sat2.aksigorta.com.tr");
captcha.setApiServer("api.leminnow.com");Use this method to solve Turnstile and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
Turnstile captcha = new Turnstile();
captcha.setSiteKey("0x4AAAAAAAChNiVJM_WtShFf");
captcha.setUrl("https://ace.fusionist.io");Use this method to solve AmazonWaf and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
AmazonWaf captcha = new AmazonWaf();
captcha.setSiteKey("AQIDAHjcYu/GjX+QlghicBgQ/7bFaQZ+m5FKCMDnO+vTbNg96AF5H1K/siwSLK7RfstKtN5bAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglg");
captcha.setUrl("https://non-existent-example.execute-api.us-east-1.amazonaws.com");
captcha.setIV("test_iv");
captcha.setContext("test_context");Use this method to solve Friendly Captcha and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
FriendlyCaptcha friendlyCaptcha = new FriendlyCaptcha();
friendlyCaptcha.setSiteKey("FCMST5VUMCBOCGQ9");
friendlyCaptcha.setPageUrl("https://mysite.com/page/with/FriendlyCaptcha");Use this method to solve MtCaptcha and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
MtCaptcha mtCaptcha = new MtCaptcha();
mtCaptcha.setSiteKey("MTPublic-KzqLY1cKH");
mtCaptcha.setPageUrl("https://mysite.com/page/with/mtcaptcha");Use this method to solve Tencent and obtain a token to bypass the protection.
solvecaptcha solver = new Solvecaptcha(args[0]);
Tencent tencent = new Tencent();
tencent.setAppId("2092215077");
tencent.setPageUrl("https://mysite.com/page/with/tencent");These methods can be used for manual captcha submission and answer polling.
String captchaId = solver.send(captcha);
Thread.sleep(20 * 1000);
String code = solver.getResult(captchaId);Use this method to get your account's balance
double balance = solver.balance();Use this method to report good or bad captcha answer.
solver.report(captcha.getId(), true); // captcha solved correctly
solver.report(captcha.getId(), false); // captcha solved incorrectlyYou can pass your proxy as an additional argument for methods: recaptcha, funcaptcha, geetest, geetest v4, keycaptcha, capy puzzle, lemin, turnstile, amazon waf and etc. The proxy will be forwarded to the API to solve the captcha.
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");If case of an error captcha solver throws an exception. It's important to properly handle these cases. We recommend to use try catch to handle exceptions.
try {
solver.solve(captcha);
} catch (ValidationException e) {
// invalid parameters passed
} catch (NetworkException e) {
// network error occurred
} catch (ApiException e) {
// api respond with error
} catch (TimeoutException e) {
// captcha is not solved so far
}The code in this repository is licensed under the MIT License. See the LICENSE file for more details.
