From be6c8ac233fe82e71c050ff6813644868777bc5f Mon Sep 17 00:00:00 2001 From: Ostap Skryshevskyi Date: Wed, 28 Nov 2018 17:44:31 +0200 Subject: [PATCH] More changes --- index.js | 7 +- lib/anticaptcha.js | 4 +- lib/fields/field.js | 3 +- lib/fields/index.js | 5 +- lib/fields/link.js | 2 +- lib/{formBuilder.js => form.js} | 10 +-- lib/proxy.js | 15 +++- lib/tasks/customCaptchaTask.js | 35 ++++---- tests/test_1.js | 138 ++++++++++++++++++++++++++++++-- 9 files changed, 179 insertions(+), 40 deletions(-) rename lib/{formBuilder.js => form.js} (80%) diff --git a/index.js b/index.js index 816ab22..bf256a9 100644 --- a/index.js +++ b/index.js @@ -3,14 +3,15 @@ const Anticaptcha = require('./lib/anticaptcha'); const Proxy = require('./lib/proxy'); const Tasks = require('./lib/tasks'); -const FormBuilder = require('./lib/formBuilder'); -const Errors = require('./lib/errors'); +const Form = require('./lib/form'); +const Errors = require('./lib/errors'); module.exports = Anticaptcha; module.exports.Anticaptcha = Anticaptcha; module.exports.Proxy = Proxy; +module.exports.Form = Form; module.exports.Errors = Errors; -module.exports.FormBuilder = FormBuilder; +module.exports.ApiError = Errors.ApiError; Object.keys(Tasks).forEach(task => { module.exports[task] = Tasks[task]; diff --git a/lib/anticaptcha.js b/lib/anticaptcha.js index 902f9d9..31714f5 100644 --- a/lib/anticaptcha.js +++ b/lib/anticaptcha.js @@ -171,7 +171,7 @@ class Anticaptcha { return this.getTaskResult(taskId, { extended: true }) .then(res => { if(!res) return res; - + if(res.status === 'processing') { return Promise.delay(waitTime[(opts._step === 1 ? 1 : 0)]) .then(_ => { @@ -189,7 +189,7 @@ class Anticaptcha { if(!opts.extended) { return res.solution; } - + delete res.status; return res; }) diff --git a/lib/fields/field.js b/lib/fields/field.js index 78145b5..a64448c 100644 --- a/lib/fields/field.js +++ b/lib/fields/field.js @@ -38,11 +38,12 @@ class ContentField extends Field { } class InputField extends Field { - constructor(label, type, name, opts) { + constructor(label, type, name, opts, value) { super(label); this._type = type; this._name = name; this._options = opts; + this._value = value; } toJSON() { diff --git a/lib/fields/index.js b/lib/fields/index.js index 1fdb548..acb8c2b 100644 --- a/lib/fields/index.js +++ b/lib/fields/index.js @@ -3,11 +3,11 @@ const Field = require('./field'); const ContentField = Field.ContentField; const InputField = Field.InputField; -// + const TextField = require('./text'); const LinkField = require('./link'); const ImageField = require('./image'); -// + const TextboxField = require('./textbox'); const TextareaField = require('./textarea'); const CheckboxField = require('./checkbox'); @@ -24,6 +24,7 @@ module.exports = { TextField, LinkField, ImageField, + TextboxField, TextareaField, CheckboxField, diff --git a/lib/fields/link.js b/lib/fields/link.js index 8595814..efc4a15 100644 --- a/lib/fields/link.js +++ b/lib/fields/link.js @@ -4,7 +4,7 @@ const ContentField = require('./field').ContentField; class LinkField extends ContentField { constructor(label, url, text) { - super(label, 'link', {url, text}); + super(label, 'link', { url, text }); } } diff --git a/lib/formBuilder.js b/lib/form.js similarity index 80% rename from lib/formBuilder.js rename to lib/form.js index ab81a00..0057751 100644 --- a/lib/formBuilder.js +++ b/lib/form.js @@ -3,8 +3,8 @@ const Fields = require('./fields'); const Field = Fields.Field; -class FormBuilder { - // TODO: add check name func +class Form { + // TODO: add check fields name constructor(opts = {/*checkname:false*/}) { this._opts = opts; @@ -16,7 +16,7 @@ class FormBuilder { add(field) { let id; if(!(field instanceof Field)) { - throw new Error('Field is not instance of Field class'); + throw new Error('Argument is not instance of Field class'); } id = this._lastId++; this._fields[id] = field; @@ -40,7 +40,7 @@ class FormBuilder { } Object.keys(Fields).forEach(field => { - FormBuilder[field] = Fields[field]; + Form[field] = Fields[field]; }); -module.exports = FormBuilder; +module.exports = Form; diff --git a/lib/proxy.js b/lib/proxy.js index 618011b..e2e6f45 100644 --- a/lib/proxy.js +++ b/lib/proxy.js @@ -4,6 +4,8 @@ const VALID_PROXY_TYPES = ['http', 'socks4', 'socks5']; class Proxy { constructor(data = {/* type, address, port, ?login, ?password, agent, ?cookies */}) { + this._data = {}; + if(data instanceof Proxy) { data = data.get(); } @@ -40,17 +42,18 @@ class Proxy { res.proxyType = data.type; res.proxyAddress = data.address; res.proxyPort = data.port; - res.userAgent = data.agent; - if(typeof this._login !== 'undefined') { + if(typeof data.login !== 'undefined') { res.proxyLogin = data.login; } - if(typeof this._password !== 'undefined') { + if(typeof data.password!== 'undefined') { res.proxyPassword = data.password; } - if(typeof this._cookies !== 'undefined') { + res.userAgent = data.agent; + + if(typeof data.cookies !== 'undefined') { res.cookies = data.cookies; } @@ -58,6 +61,10 @@ class Proxy { } static checkProxy(proxyData = {}) { + if(proxyData instanceof Proxy) { + proxyData = proxyData.get(); + } + if(VALID_PROXY_TYPES.indexOf(proxyData.type) === -1) { throw new Error(`Invalid proxy type '${res.type}'. Valid: ${VALID_PROXY_TYPES.join(', ')}. `); } diff --git a/lib/tasks/customCaptchaTask.js b/lib/tasks/customCaptchaTask.js index 80792f6..162a909 100644 --- a/lib/tasks/customCaptchaTask.js +++ b/lib/tasks/customCaptchaTask.js @@ -3,40 +3,41 @@ const clone = require('clone'); const Task = require('./task'); -const FormBuilder = require('../formBuilder'); +const Form = require('../form'); class CustomCaptchaTask extends Task { - constructor(opts = {/*url, assignment, forms*/}) { - let forms = opts.forms; + constructor(opts = {/*url, assignment, form*/}) { + let form = opts.forms; - if(forms instanceof FormBuilder) { - forms = forms.toJSON(); + if(form instanceof Form) { + form = form.toJSON(); } - super('SquareNetTextTask', { + super('CustomCaptchaTask', { url : opts.url, assignment: opts.assignment, - forms : forms + form : form }, false, 5*1000); } toJSON() { let data = this.data; return super.toJSON({ - imageUrl : opts.url, - assignment: opts.assignment, - forms : opts.forms + imageUrl : data.url, + assignment: data.assignment, + forms : data.form }); } static parseResult(data = {}) { - return { - taskId : data.taskId, - imageUrl : data.imageUrl, - assignment: data.assignment, - status : data.status, - answers : clone(data.answers) - }; + return clone(data.answers); + // return { + // taskId : data.taskId, + // imageUrl : data.imageUrl, + // assignment: data.assignment, + // status : data.status, + // answers : clone(data.answers) + // }; } } diff --git a/tests/test_1.js b/tests/test_1.js index 6006137..7355c30 100644 --- a/tests/test_1.js +++ b/tests/test_1.js @@ -2,8 +2,7 @@ const Anticaptcha = require('..'); const Proxy = Anticaptcha.Proxy; - - +const Form = Anticaptcha.Form; let proxy = new Proxy({ @@ -15,10 +14,139 @@ let proxy = new Proxy({ let a = new Anticaptcha('c4fbd67246c4b57dc89c2c3187ae2e71'); -let task = new Anticaptcha.NoCaptchaTask({url:'https://www.boards.ie/', sitekey: '6LfBixYUAAAAABhdHynFUIMA_sa4s-XsJvnjtgB0'}, proxy); +let task = new Anticaptcha.NoCaptchaTask({url:'https://www.boards.ie/', sitekey: '6LfBixYUAAAAABhdHynFUIMA_sa4s-XsJvnjtgB0'}); +// +// a.getTaskResult(123518664, { +// extended: true, +// wait: true +// }) +// // a.createTask(task) +// .then(_ => { +// console.log('res', _); +// }) +// .catch(err => { +// console.log(err); +// }) + + +let form = new Form(); + +// form.add(new Form.TextField('Label of the field', 'Some text...')); +// form.add(new Form.TextareaField(['Enter some text', 'For example your story'], 'nameOfArea', { +// placeholder: 'Placeholder for texarea' +// })); +// form.add(new Form.SelectField('Select HEX', 'nameOfSelect', { +// red: '#F00', +// black: '#000', +// white: '#FFF' +// })); + +form.add(new Form.TextareaField('Describe car', 'desc', { + // placeholder: 'Placeholder for texarea' +})); +form.add(new Form.SelectField('Select color', 'color', { + red: 'red', + black: 'black', + white: 'white' +})); +form.add(new Form.CheckboxField('Is it car?', 'isCar', { + text: 'Yes', + value: 'yes' +})); +form.add(new Form.CheckboxField('Is it car?', 'isCar2', { + text: 'Yes' +})); + +form.add(new Form.CheckboxField('Is it bus?', 'isBus', { + text: 'Yes', + value: 'no' +})); + +form.add(new Form.TextboxField('Do not touch it', 'text', { + placeholder: 'DO NOT TOUCH' +})); -// a.getTaskResult(122284760, {extended: false, wait:true}) -a.solve(task) +// console.dir(form.toJSON(), {depth:null}); + +// form.add(new Form.CheckboxField('Is it ?', 'isBus', { +// text: 'Yes', +// value: 'yes' +// })); + + +/* +[ { label: 'Describe car', + name: 'desc', + value: undefined, + inputType: 'textarea', + inputOptions: {} }, + { label: 'Select color', + name: 'color', + value: undefined, + inputType: 'select', + inputOptions: + [ { value: 'red', caption: 'red' }, + { value: 'black', caption: 'black' }, + { value: 'white', caption: 'white' } ] }, + { label: 'Is it car?', + name: 'isCar', + value: 'yes', + inputType: 'checkbox', + inputOptions: { label: 'Yes' } }, + { label: 'Is it car?', + name: 'isCar2', + value: undefined, + inputType: 'checkbox', + inputOptions: { label: 'Yes' } }, + { label: 'Is it bus?', + name: 'isBus', + value: 'no', + inputType: 'checkbox', + inputOptions: { label: 'Yes' } }, + { label: 'Do not touch it', + name: 'text', + value: 'DO NOT TOUCH PLEASE', + inputType: 'text', + inputOptions: { placeHolder: 'DO NOT TOUCH' } } ] + */ + +let task2 = new Anticaptcha.CustomCaptchaTask({url:'https://www.drivespark.com/car-image/640x480x100/car/300x225x46701008-audi_a3_cabriolet.jpg.pagespeed.ic.drG8tpM8fT.jpg_', assignment: 'Select color of the car and upload any file', forms: [ { label: 'Describe car', + name: 'desc', + value: undefined, + inputType: 'textarea', + inputOptions: {} }, + { label: 'Select color', + name: 'color', + value: undefined, + inputType: 'select', + inputOptions: + [ { value: 'red', caption: 'red' }, + { value: 'black', caption: 'black' }, + { value: 'white', caption: 'white' } ] }, + { label: 'Is it car?', + name: 'isCar', + value: 'yes', + inputType: 'checkbox', + inputOptions: { label: 'Yes' } }, + { label: 'Is it car?', + name: 'isCar2', + value: false, + inputType: 'checkbox', + inputOptions: { label: 'Yes' } }, + { label: 'Is it bus?', + name: 'isBus', + value: false, + inputType: 'checkbox', + inputOptions: { label: 'Yes' } } ]}); + + + +// 26433 +a.getTaskResult(10524514, { + extended: true, + wait: true +}) +// a.createTask(task2) .then(_ => { console.log('res', _); })