From 010f1122ab648e0def4b0f92ee261909261b1947 Mon Sep 17 00:00:00 2001 From: Maxim S Date: Thu, 25 Jun 2026 16:40:19 +0200 Subject: [PATCH] Add Basilisk captcha support --- README.md | 25 ++++++++++++ examples/basilisk.js | 18 +++++++++ package.json | 3 +- src/structs/2captcha.ts | 71 +++++++++++++++++++++++++++++++++ src/utils/checkCaptchaParams.ts | 6 ++- 5 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 examples/basilisk.js diff --git a/README.md b/README.md index e7b7e30..08f4fab 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Examples of API requests for different captcha types are available on the [JavaS - [Yidun NECaptcha](#yidun-necaptcha) - [Alibaba Captcha](#alibaba-captcha) - [TSPD](#tspd) + - [Basilisk](#basilisk) - [Other methods](#other-methods) - [goodReport](#goodreport) - [badReport](#badreport) @@ -887,6 +888,30 @@ console.log(err); }) ``` +### Basilisk + +[API method description.](https://2captcha.com/2captcha-api#basilisk) + +This method can be used to solve Basilisk captcha. Returns a token. + +Required parameters: `pageurl`, `sitekey`. + +```js +solver.basilisk({ + pageurl: "https://example.com/login", + sitekey: "b7890h...19fb2600897", + userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", + proxy: "login:password@1.2.3.4:8080", + proxytype: "HTTP" +}) +.then((res) => { +console.log(res); +}) +.catch((err) => { +console.log(err); +}) +``` + ## Other methods ### goodReport diff --git a/examples/basilisk.js b/examples/basilisk.js new file mode 100644 index 0000000..ea502f6 --- /dev/null +++ b/examples/basilisk.js @@ -0,0 +1,18 @@ +const TwoCaptcha = require("../dist/index.js"); +require('dotenv').config(); +const APIKEY = process.env.APIKEY +const solver = new TwoCaptcha.Solver(APIKEY); + +solver.basilisk({ + pageurl: "https://example.com/login", + sitekey: "b7890h...19fb2600897", + userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", + proxy: "login:password@1.2.3.4:8080", + proxytype: "HTTP" +}) +.then((res) => { +console.log(res); +}) +.catch((err) => { +console.log(err); +}) diff --git a/package.json b/package.json index b52b425..577760c 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "Audio Recognition", "Yidun NECaptcha", "Alibaba Captcha", - "TSPD" + "TSPD", + "Basilisk" ], "scripts": { "build": "tsc && node ./dist/index.js", diff --git a/src/structs/2captcha.ts b/src/structs/2captcha.ts index 691f5a6..ce36c4c 100644 --- a/src/structs/2captcha.ts +++ b/src/structs/2captcha.ts @@ -362,6 +362,14 @@ export interface paramsTspd { userAgent?: string, } +export interface paramsBasilisk { + pageurl: string, + sitekey: string, + userAgent?: string, + proxy?: string, + proxytype?: string, +} + /** * An object containing properties of the captcha solution. * @typedef {Object} CaptchaAnswer @@ -2579,6 +2587,69 @@ public async tspd(params: paramsTspd): Promise { } } +/** + * ### Solves Basilisk Captcha + * + * Token-based method for automatic solving of Basilisk captcha. Returns a token. + * [Read more about Basilisk captcha](https://2captcha.com/2captcha-api#basilisk-captcha). + * + * @param {{ pageurl, sitekey, userAgent, proxy, proxytype }} params Parameters Basilisk Captcha as an object. + * @param {string} params.pageurl Full URL of the page where you see the captcha. + * @param {string} params.sitekey Value of the `data-sitekey` parameter found on the page. + * @param {string} params.userAgent Optional. Browser User-Agent used to open the page. Use the same User-Agent in requests to the target site. + * @param {string} params.proxy Optional. Proxy in format: `login:password@123.123.123.123:3128`. You can find more info about proxies [here](https://2captcha.com/2captcha-api#proxies). + * @param {string} params.proxytype Optional. Type of your proxy: `HTTP`, `HTTPS`, `SOCKS4`, `SOCKS5`. + * + * @returns {Promise} The result from the solve. + * @throws APIError + * + * @example + * solver.basilisk({ + * pageurl: "https://example.com/login", + * sitekey: "b7890h...19fb2600897", + * userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", + * proxy: "login:password@1.2.3.4:8080", + * proxytype: "HTTP" + * }) + * .then((res) => { + * console.log(res); + * }) + * .catch((err) => { + * console.log(err); + * }) + */ +public async basilisk(params: paramsBasilisk): Promise { + params = renameParams(params) + + checkCaptchaParams(params, "basilisk") + + const payload = { + ...this.defaultPayload, + ...params, + method: "basilisk", + }; + + const response = await fetch(this.in, { + body: JSON.stringify(payload), + method: "post", + headers: { "Content-Type": "application/json" } + }) + const result = await response.text() + + let data; + try { + data = JSON.parse(result) + } catch { + throw new APIError(result) + } + + if (data.status == 1) { + return this.pollResponse(data.request) + } else { + throw new APIError(data.request) + } +} + /** * Reports a captcha as correctly solved. * diff --git a/src/utils/checkCaptchaParams.ts b/src/utils/checkCaptchaParams.ts index b8dfdfa..303b37f 100644 --- a/src/utils/checkCaptchaParams.ts +++ b/src/utils/checkCaptchaParams.ts @@ -1,7 +1,7 @@ // Captcha methods for which parameter checking is available const supportedMethods = ["userrecaptcha", "hcaptcha", "geetest", "geetest_v4","yandex","funcaptcha","lemin","amazon_waf", "turnstile", "base64", "capy","datadome", "cybersiara", "mt_captcha", "bounding_box", 'friendly_captcha', 'grid', - 'textcaptcha', 'canvas', 'rotatecaptcha', 'keycaptcha', 'cutcaptcha', 'tencent', 'atb_captcha', 'prosopo', 'captchafox', 'vkimage', 'vkcaptcha', 'temu', 'altcha', 'binance', 'audio', 'yidun', 'alibaba', 'tspd'] + 'textcaptcha', 'canvas', 'rotatecaptcha', 'keycaptcha', 'cutcaptcha', 'tencent', 'atb_captcha', 'prosopo', 'captchafox', 'vkimage', 'vkcaptcha', 'temu', 'altcha', 'binance', 'audio', 'yidun', 'alibaba', 'tspd', 'basilisk'] // Names of required fields that must be contained in the parameters captcha const recaptchaRequiredFields = ['pageurl','googlekey'] @@ -40,6 +40,7 @@ const audioRequiredFields = ['body', 'lang'] const yidunRequiredFields = ['pageurl', 'sitekey'] const alibabaRequiredFields = ['pageurl', 'scene_id', 'prefix'] const tspdRequiredFields = ['pageurl', 'tspd_cookie', 'html_page_base64', 'proxy', 'proxytype'] +const basiliskRequiredFields = ['pageurl', 'sitekey'] /** * Getting required arguments for a captcha. @@ -156,6 +157,9 @@ const getRequiredFildsArr = (method: string):Array => { case "tspd": requiredFieldsArr = tspdRequiredFields break; + case "basilisk": + requiredFieldsArr = basiliskRequiredFields + break; } return requiredFieldsArr }