Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const path = require('path');
- const faker = require('faker');
- const Nightmare = require('nightmare');
- require('nightmare-upload')(Nightmare);
- const SELECTOR = {
- captcha: `[style="color:white;font-weight:bold;padding-left:25px;font-size:18px;background:url('/PartnerRegistrationForm-portlet/images/capchaback.png') no-repeat;"]`,
- name: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_name]',
- telno: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_telno]',
- email: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_email]',
- fax: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_fax]',
- tinno: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_tinno]',
- attachfile: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_attachfile]',
- exe: '[name=exe]',
- usercode: '[name=_partneractionclass_WAR_PartnerRegistrationFormportlet_usercode]',
- submit: 'button[type=submit]',
- };
- const insa = (url, options) => {
- let insaWait = null;
- const nightmare = Nightmare(Object.assign({
- show: true,
- typeInterval: 32,
- }, options));
- const errorHandler = (error) => {
- clearInterval(insaWait);
- nightmare.halt();
- console.error(error);
- };
- const run = (subscribe) => {
- nightmare
- .wait(SELECTOR.captcha)
- .evaluate((_selector) => {
- let interval = null;
- return new Promise((resolve) => {
- interval = setInterval(() => {
- if (document.querySelector(_selector.captcha) !== null) {
- clearInterval(interval);
- resolve(document.querySelector(_selector.captcha).innerHTML);
- }
- }, 500);
- });
- }, SELECTOR)
- .then((token) => {
- if (!token || token.length !== 11) {
- console.log('> token clear');
- clearInterval(insaWait);
- run(subscribe);
- return;
- }
- const [name, telno, email, fax, tinno] = [
- faker.name.findName(),
- faker.phone.phoneNumber().replace(/ x.+$/, ''),
- faker.internet.email(),
- faker.phone.phoneNumber().replace(/ x.+$/, ''),
- faker.phone.phoneNumber().replace(/ x.+$/, ''),
- ];
- nightmare
- .type(SELECTOR.name, name)
- .type(SELECTOR.telno, telno)
- .type(SELECTOR.email, email)
- .type(SELECTOR.fax, fax)
- .type(SELECTOR.tinno, tinno)
- .upload(SELECTOR.attachfile, path.resolve('./Fight-Milk.pdf'))
- .type(SELECTOR.usercode, token)
- .click(SELECTOR.submit)
- .then(() => {
- if (insaWait !== null) {
- clearInterval(insaWait);
- }
- insaWait = setInterval(() => {
- nightmare
- .wait(SELECTOR.name)
- .evaluate((_selector) => {
- let interval = null;
- return new Promise((resolve) => {
- interval = setInterval(() => {
- if (document.querySelector(_selector.name) !== null) {
- clearInterval(interval);
- resolve(document.querySelector(_selector.name).value);
- }
- }, 500);
- });
- }, SELECTOR)
- .then((nameValue) => {
- if (typeof nameValue === 'string' && nameValue.length === 0) {
- if (subscribe) {
- subscribe({ name, telno, email, fax, tinno });
- }
- clearInterval(insaWait);
- run(subscribe);
- }
- });
- }, 1000);
- }, errorHandler);
- }, errorHandler);
- };
- try {
- nightmare.goto(url);
- } catch (error) {
- errorHandler(error);
- }
- return {
- run,
- insaWait,
- nightmare,
- };
- };
- module.exports = insa;
Advertisement
Add Comment
Please, Sign In to add comment