Socket
Socket
Sign inDemoInstall

anticaptcha2

Package Overview
Dependencies
53
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    anticaptcha2

A simple client to solve captchas using https://anti-captcha.com


Version published
Weekly downloads
14
increased by250%
Maintainers
1
Install size
5.80 MB
Created
Weekly downloads
 

Readme

Source

AntiCaptcha2 🤖

A simple NodeJS package for solving almost all types of captchas using https://anti-captcha.com

Table of contents


Features


API key

Before using this package you should recharge the balance and get API-key. Step by step:

  • Create account at anti-captcha.com.
  • Recharge the balance (Finance > Add Funds).
  • Create API-key (Settings > API setup).
  • That's all.

Anticaptcha

[TODO: add text]

new Anticaptcha(apikey, [proxy])

The class creates an object that wraps the anti-captcha API. apikey - API key, which can be obtained in account settings proxy - is an optional parameter that specifies the default proxy. See Proxy.

const Anticaptcha = require('anticaptcha2');
const Proxy = Anticaptcha.Proxy;

let anticaptcha = new Anticaptcha('API_KEY', new Proxy({...}));

anticaptcha.getProxy()

Method to get the default proxy. If no proxy is specified, it will return null.

anticaptcha.setProxy(proxy)

Method to set the default proxy. proxy - either an instance of the class Proxy or an object with parameters like the class of Proxy

anticaptcha.method(method, [data, [isPrivate]])

Method for calling the custom anti-captcha API method. Returns Promise.

  • method - string method name
  • data - object with data. (Default: {})
  • isPrivate - whether you need to add an api-key to the request. Only needed for private methods. (Default: false)

anticaptcha.getBalance()

Method to fetch account balance. Returns Promise.

anticaptcha.getBalance()
  .then(balance => {
    console.log(`Balance: ${balance}$`);
  })
;

anticaptcha.getQueueStats(queueId)

This method allows to define if it is suitable time to upload new task. Results are cached for 10 seconds. Returns Promise. queueId - id of the queue. The following queues are available:

  • 1 - standart ImageToText, English language
  • 2 - standart ImageToText, Russian language
  • 5 - Recaptcha NoCaptcha tasks
  • 6 - Recaptcha Proxyless task
  • 7 - Funcaptcha
  • 10 - Funcaptcha Proxyless
anticaptcha.getQueueStats(1)
  .then(stats => {
    console.log(stats);
    /*
    {
      waiting: 242,
      load: 60.33,
      bid: "0.0008600982",
      speed: 10.77,
      total: 610
    }
    */
  })
;

Response:

FieldDescription
waitingAmount of idle workers online, waiting for a task
loadQueue load in percents
bidAverage task solution cost in USD
speedAverage task solution speed in seconds
totalTotal number of workers

anticaptcha.solve(task, [opts])

It's a fast and simple alias for methods anticaptcha.createTask(task, opts) and anticaptcha.getTaskResult(taskId).

anticaptcha.createTask(task, [opts])

This method creates a task for solving selected captcha type. Returns ID of the created task.

  • task - task-object (plain object with key-values) or Task instance.
  • opts - optional object with extra params:
    • softId - ID of your application from out AppCenter
    • languagePool - Sets workers pool language. At the moment the following language pools are available:
      en (default) - English language queue
      rn : group of countries: Russia, Ukraine, Belarus, Kazahstan
    • callbackUrl - web address were will send result of captcha/factory task processing. Contents are sent by AJAX POST request and are similar to the contents of anticaptcha.getTaskResult method.

anticaptcha.getTaskResult(taskId, [opts])

Request task result. If the task is not completed, the status will be processing. Returns Promise.

  • taskId - ID of the task.
  • opts - optional object with extra params:
    • extended - If true method will return extended result of task (with cost, ip et.c.). Otherwise - only solution. (Default: false)
    • wait - set to true to wait for a solution of the task. (Default: false)
    • waitTime - if wait is true, then this parameter can specify timeouts to check the result of the task. It's an 2-elements array: first element - first request delay, second - second and next request. Numbers in ms. (Defaults: [5000, 2000] )
// Task is not ready
anticaptcha.getTaskResult(1).then(res => {
  console.log(res);
  // undefined
});

// Task is not ready
anticaptcha.getTaskResult(1, { extended: true }).then(res => {
  console.log(res);
  // { status: 'processing' }
});


// Task is ready
anticaptcha.getTaskResult(1).then(res => {
  console.log(res);
  /* {
    gRecaptchaResponse: '03ADlfD18SShzn11....',
    gRecaptchaResponseMD5: 'dd32a86659c94097f5d63c6557aa2fb9'
  } */
});

// Task is ready
anticaptcha.getTaskResult(1, { extended: true }).then(res => {
  console.log(res);
  /* {
  status: 'ready',
  solution: {
    gRecaptchaResponse: '03ADlfD18S....',
    gRecaptchaResponseMD5: 'dd32a86659c94097f5d63c6557aa2fb9'
  },
  cost: '0.002200',
  ip: '108.113.114.0',
  createTime: 1543247549,
  endTime: 1543247573,
  solveCount: 0
  } */
});

// Waiting
// The promise will be fulfilled when the status of the task is "fulfilled".
// By default first try in 5 sec, second and next - in 2 sec.
anticaptcha.getTaskResult(1, { wait: true }).then(res => {
  console.log(res);
  /* {
    gRecaptchaResponse: '03ADlfD18SShzn11....',
    gRecaptchaResponseMD5: 'dd32a86659c94097f5d63c6557aa2fb9'
  } */
});

// Waiting
// You can set timeouts. In this example: 1st - 2 sec, 2nd and next = 1 sec.
anticaptcha.getTaskResult(1, { wait: true, waitTime: [2000, 1000] }).then(res => {
  console.log(res);
  /* {
    gRecaptchaResponse: '03ADlfD18SShzn11....',
    gRecaptchaResponseMD5: 'dd32a86659c94097f5d63c6557aa2fb9'
  } */
});

anticaptcha.reportIncorrectImageCaptcha(taskId)

Complaints are accepted only for image captchas. Your complaint will be checked by 5 workers, 3 of them must confirm it. Only then you get full refund. Note: If you have less than 20% confirmation ratio, your reports will be ignored.

anticaptcha.test(data)

This method reads request data, parses it and outputs as array. It also outputs post data in a raw format. You may use it for debugging your code. data - anything (string/number/object/array)

anticaptcha.test({a: "a"}).then(res => {
  console.log(res)
  /*
    Parsed input JSON:
    Array
    (
    [a] => a
    )
    Raw POST input:
    {"a":"a"}
  */
});

Proxy

At the moment almost all captcha services do not have protection from situations when the puzzle is solved on one IP address and form with captcha-response is submitted from another IP.

const Proxy = require('anticaptcha2').Proxy;

let proxy = new Proxy({
  type: 'http',
  address:'8.8.8.8',
  port: '8080',
  agent: 'Mozilla/5.0 ...'
});

new Proxy(opts)

The constructor will not check the required fields. This is done so that you later set some fields (see Proxy.checkProxy())

NameTypeRequiredDescription
typeStringtrueType of proxy.
  • http - usual http/https
  • socks4 - socks4
  • socks5 - socks5
addressStringtrueProxy IP address ipv4/ipv6. Not allowed to use:
  • host names instead of IPs
  • transparent proxies (where client IP is visible)
  • proxies from local networks (192.., 10.., 127...)
portStringtruePort of proxy
loginStringfalseLogin for proxy which requires authorizaiton (basic)
passwordStringfalseProxy password
agentStringtrueBrowser's User-Agent which is used in emulation. It is required that you use a signature of a modern browser, otherwise Google will ask you to "update your browser"
cookiesStringfalseAdditional cookies which we must use during interaction with target page or Google.
Format: 'cookie1=value1; cookie2=value2'

Note: opts can by another instance of Proxy. Constructor will copy all parametrs.

proxy.set(opts, [reset])

The way to change the proxy settings. opts - like constructor's opts. reset - if false - then opts overwrite the previous parameters. Otherwise - previous ones will be erased and new ones will be recorded. (Default: false)

proxy.get()

Returns proxy parametrs.

let proxy = new Proxy({
  type: 'http',
  address: '8.8.8.8',
  port: '8080',
  login: 'user',
  password: 'pass',
  agent: 'Mozilla/5.0 ...',
  cookies: 'cookie1=value1; cookie2=value2'
});

console.log(proxy.get());
/*
{
  type: 'http',
  address: '8.8.8.8',
  port: '8080',
  login: 'user',
  password: 'pass',
  agent: 'Mozilla/5.0 ...',
  cookies: 'cookie1=value1; cookie2=value2'
}
*/

proxy.toJSON([check])

Returns JSON-object. If check = true check required proxy settings (Default: false).

let proxy = new Proxy({
  type: 'http',
  address: '8.8.8.8',
  port: '8080',
  login: 'user',
  password: 'pass',
  agent: 'Mozilla/5.0 ...',
  cookies: 'cookie1=value1; cookie2=value2'
});

console.log(proxy.toJSON());
/*
{
  proxyType: 'http',
  proxyAddress: '8.8.8.8',
  proxyPort: '8080',
  proxyLogin: 'user',
  proxyPassword: 'pass',
  userAgent: 'Mozilla/5.0 ...',
  cookies: 'cookie1=value1; cookie2=value2'
}
*/

Proxy.checkProxy(proxyData)

Static method of the class Proxy for checking the required fields of the proxy. If some required field is not specified, it will throw the error. Will return true if all is good.

let proxy = new Proxy({
  type: 'socks4',
  address: '8.8.8.8',
  port: '8080'
});

Proxy.checkProxy({
  type: 'socks4',
  address: '8.8.8.8',
  port: '8080'
});
// Same as
Proxy.checkProxy(proxy.get());
// Same as
Proxy.checkProxy(proxy);

// All above throw Error('No agent');

Tasks

For quick and easy use of api, use list of classes that implement all supported task types:

const Anticaptcha = require('anticaptcha2');

const ImageToTextTask = Anticaptcha.ImageToTextTask;
const NoCaptchaTask = Anticaptcha.NoCaptchaTask;
// etc ...

new <Task>(opts, [proxy])

Create new task (type of task is determined by the class name) with opts and proxy (if it's type of task support proxy mod).

<task>.type

Property that returns the task type. Note: you can not set type of task, it is determines automaticaly.

<task>.data

Getter/Setter that helps to get/set task opts.

<task>.proxy

Getter/Setter that helps to get/set proxy of the task. It's can be or Boolean (true/false) or Proxy instance ot proxy-object. If setted true, the proxy params before sending the request will be taken from the default proxy data from Anticaptcha instance. Note: if task supports proxy-mod, then type will automatically switched.

<task>.toJSON()

Serialization task opts for API request.

Result of task

[TODO: add text]

new ImageToTextTask(opts)

Classic task convert text from image to textbox.

Params (otps):

FieldTypeRequiredDefaultDescription
bodyStringyes-File body encoded in base64. Make sure to send it without line breaks.
phraseBooleannofalsefalse - no requirements
true - worker must enter an answer with at least one "space"
caseBooleannofalsefalse - no requirements
true - worker will see a special mark telling that answer must be entered with case sensitivity
numericIntegerno00 - no requirements
1 - only number are allowed
2 - any letters are allowed except numbers
mathBooleannofalsefalse - no requirements
true - worker will see a special mark telling that answer must be calculated
lengthArray<Integer>no[0,0]Set min and max length of an answer. First element - min, second - max.
0 - no requirements
>1 - defines min/max length of the answer
commentStringno''Additional comment for workers like "enter letters in red color"

Result:

{
  text: "the answer",
  url: "http://webaddress.com/captcha.jpg"
}
new NoCaptchaTask(opts, [proxy])

Google's reCAPTCHA v2 (I'm not a robot). Note: supports proxy mod.

Params (otps):

FieldTypeRequiredDescription
urlStringyesAddress of target web page
sitekeyStringyesRecaptcha website key
<div class="g-recaptcha" data-sitekey="THAT_ONE"></div>
stokenStringnoDeprecated
isVisibleBooleannoSpecify if Recaptcha is invisible

Result:

{
  gRecaptchaResponse: "3AHJ_VuvYIBNBW5yyv0zRYJ75VkOKvhKj9_xGBJKnQimF72rfoq3Iy-DyGHMwLAo6a3"
}
FieldTypeDescription
gRecaptchaResponseStringHash string which is required for interacting with submit form on target website. It looks like this:
<textarea id="g-recaptcha-response" ..></textarea>
new GeeTestTask(opts, [proxy])

GeeTest captcha. Note: supports proxy mod.

Params (otps):

FieldTypeRequiredDescription
urlStringyesAddress of target web page
gtStringyesThe domain key
challengeStringyesChanging token key. Make sure to grab fresh one for each captcha, otherwise you will be charged for error task.

Result:

{
  challenge: "3c1c5153aa48011e92883aed820069f3hj",
  validate: "47ad5a0a6eb98a95b2bcd9e9eecc8272",
  seccode: "83fa4f2d23005fc91c3a015a1613f803|jordan"
}
FieldTypeDescription
challengeStringHash string which is required for interacting with submit form on target website
validateStringHash string which is required too
seccodeStringAnother required hash string, we have no idea why there are 3 of them

new FunCaptchaTask(opts, [proxy])

FunCaptcha Note: supports proxy mod.

Params (otps):

FieldTypeRequiredDescription
urlStringyesAddress of target web page
publickeyStringyesFuncaptcha public key
<div id="funcaptcha" data-pkey="THIS_ONE"></div>

Result:

{
  token: "36859d1086acb06e7.08293101|r=ap-southeast-1|metabgclr=%23ffffff|guitextcolor=%23555555|metaiconclr=%23cccccc|meta=3|pk=3B24C079-2DF1-771D-913A-11F824CD5A7C|injs=https://cdn.funcaptcha.com/fc/assets/graphics/etoxic/url_force.js|rid=11|cdn_url=https://cdn.funcaptcha.com/fc|surl=https://funcaptcha.com"
}
FieldTypeDescription
tokenStringHash string which is required for interacting with submit form on target website.

new SquareNetTextTask(opts)

This type of tasks takes your image, adds custom grid on it and asks our worker to mark specified objects on it. Something like Google's pazzle (find car on pictures), but too old.

Params (otps):

FieldTypeRequiredDescription
bodyStringyesFile body encoded in base64. Make sure to send it without line breaks
nameStringyesName of the object. Example: banana

Result:

{
  cellNumbers: [4,6,7]
}
FieldTypeDescription
cellNumbersArray<Integer>Array holding cell numbers which start from 0, left to right, top to the bottom.

new CustomCaptchaTask(opts)

This type of tasks is suitable for use when you need to describe what is on an image and you need workers to fill a custom form for this.

Examples:

  • Read letters and numbers from a car license plate
  • Find a phone number on a commercial
  • Complete task like "count monkeys on a picture"
  • etc.

Params (otps):

FieldTypeRequiredDescription
urlStringyesAddress of an image
assignmentStringnoDescribe what worker must do in English
formsform/ObjectnoCustom form object. It can be or JSON-object or instance of Form To build this object you have 3 options:

Result:

{
  taskId: 407533072,
  imageUrl: "https://files.anti-captcha.com/26/41f/c23/7c50ff19.jpg",
  assignment: "Enter license plate number",
  status: "complete",
  answers: {
    license_plate: "TONFNTI",
    color: "grey"
  }
}

[TODO: add text]


Form

Form is created to create forms for CustomCaptchaTask. It has next fields:

  • TextField - simple plain text.
  • LinkField - button-link (HTML-tag: <a>).
  • ImageField - static image (HTML-tag: <img>).
  • TextboxField - textbox (HTML-tag: <input type="text"></input>).
  • TextareaField - textarea (HTML-tag: <textarea></textarea>).
  • CheckboxField - checkbox (HTML-tag: <input type="checkbox"></input>).
  • RadioField - list of radio inputs (HTML-tag: <input type="radio"></input>...).
  • SelectField - select (HTML-tag: <select><option>One</option>...</select>).
  • ImageUploadField - file uploader (HTML-tag: <input type="file"></input>).
const Form = Anticaptcha.Form;

// Creating form
let form = new Form();
form.add(new Form.TextField('Label of the field', 'Some text...'));
form.add(new Form.TextareaField('Enter some text', 'nameOfArea', {
    placeholder: 'Placeholder for texarea'
}));
form.add(new Form.SelectField('Select HEX', 'nameOfSelect', {
    red: '#F00',
    black: '#000',
    white: '#FFF'
}));

// Creating task
let customTask = new Anticaptcha.CustomCaptchaTask({
    url: 'http://url_to_the_image.com',
    assigment: 'Please answer on questions',
    form: form
});

// Sending task
anticaptcha.solve(customTask).then(res => {
    ...
});

[TODO: add image example]

new Form()

[TODO: add text]

form.add(field)

Add new field to form. field - instance of any Field. Returns id of the added field.

form.remove(id)

Remove field from form. id - id of the previous added field. Returns true if field finded and removed, false - otherwise.

form.toJSON()

Stringify form to JSON object according to documentation.

Fields

Some points:

  • For all Fields first argument is label - description for the form field or content. Its type is String or Array<String> with two elements. If you passed Array then first element will be label, second - subtitle for label. Example: new TextField('Label') and new TextField(['Label', 'Subtitle'])
  • For all dynamic fields (TextboxField, CheckboxField, etc.) second arguments is name - like <input> attribute name. It's used to get values of CustomCaptchaTask's answers . Note: It's must be unique!
new TextField(label, text)

Plain text. It's static field. Compiled into:

<input type="textbox" value="{text}" disabled>
FieldTypeRequiredDescription
textStringyesSet text
new LinkField(label, url, text)

A link button. It's static field. Compiled into:

<a href="{url}">{text}</a>
FieldTypeRequiredDescription
urlStringyesSets link's url
textStringyesSets a body to link
new ImageField(label, url)

Image field displays an image with zoom function. It's static field. Compiled into:

<img src="{url}">
FieldTypeRequiredDescription
urlStringyesSets source url of the image
new TextboxField(label, name, [opts])

Single-line text input - textbox. It's dynamic field. Compiled into:

<input type"text" name="{name}" placeholder="{opts.placeholder}">
FieldTypeRequiredDescription
opts.placeholderStringnoSets input's placeholder
opts.widthIntegernoSets width of the input in percents.
One number from 25, 33, 50 or 100
new TextareaField(label, name, [opts])

Multi-line text input - textarea. It's dynamic field. Compiled into:

<textarea name="{name}" placeholder="{opts.placeholder}" rows="{opts.rows}"></textarea>
FieldTypeRequiredDescription
opts.placeholderStringnoSets input's placeholder
opts.widthIntegernoSets width of the input in percents.
One number from 25, 33, 50 or 100
opts.rowsIntegernoSets number for lines
new CheckboxField(label, name, text)

Checkbox, single option input. It's dynamic field. Compiled into:

<input type="checkbox" name="{name}">{text}</input>
FieldTypeRequiredDescription
textStringyesText label for checkbox
new RadioField(label, name, keyvals)

Set of radio buttons. It's dynamic field. Example: keyvals = {key1: "val1", key2: "val2", key3: "val3"} compiles into:

<input type="radio" name="{name}" value="key1">val1</input>
<input type="radio" name="{name}" value="key2">val2</input>
<input type="radio" name="{name}" value="key3">val3</input>
FieldTypeRequiredDescription
keyvalsObjectyesObject with key-values. Each object key is a value, each keyvals value is a content of input.
new SelectField(label, name, keyvals)

Dropdown select box. It's dynamic field. Example: keyvals = {key1: "val1", key2: "val2", key3: "val3"} compiles into:

<select name="{name}">
  <option value="key1">val1</option>
  <option value="key2">val2</option>
  <option value="key3">val3</option>
</select>
FieldTypeRequiredDescription
keyvalsObjectyesObject with key-values. Each object key is a value, each keyvals value is a content of option.
new ImageUploadField(label, name)

Image upload input. It's dynamic field.

<input type="file" name="{name}">

ApiError

To catch all API errors use Bluebird's filtered catch.

const Anticaptcha = require('anticaptcha2');

...

anticaptcha.solve(task)
  .then(res => {
      ...
  })
  .catch(Anticaptcha.ApiError, err => {
      console.error('Anticaptcha API error:', err)
  })
;

Keywords

FAQs

Last updated on 29 Nov 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc