UNPKG

docparse-scraper-nst

Version:

Node Zombie based scraper to scrape bills from the NStar (supplier code "NST)" website

72 lines (68 loc) 2.3 kB
var inspect = require('eyespect').inspector(); var async = require('async'); var getSelectedAccountData = require('./getSelectedAccountData'); module.exports = function (data, cb) { var maxAttemps = 2; var attempt = 0; var desiredAccountNumber = data.accountNumber; var output = { username: data.currentLogin.username, accountIndex: data.accountIndex, numAccounts: data.numAccounts }; inspect(output, 'selecting account'); var currentAccountNumber, currentAccountName; async.until( function () { var accountData = getSelectedAccountData(data.bro); if (!accountData) { return false; } currentAccountNumber = accountData.accountNumber; var accountNumberCorrect = false; var info = { currentNumber: currentAccountNumber, desiredNumber: desiredAccountNumber }; if (desiredAccountNumber === currentAccountNumber) { return true; } return false; }, function(selectCB) { attempt++; if (attempt > maxAttemps) { return selectCB('failed to select account, max number of attempts reached'); } performSelectAccount(data, function (err, reply) { if (err) { return selectCB(err); } selectCB(); }); }, function (err) { if (err) { inspect(err, 'done selecting account error'); return cb(err); } cb(); } ); }; function performSelectAccount (data, cb) { deselectAllAccounts(data.bro, function (err, reply) { data.bro.select('select[name="accountNumber"]', data.accountNumber, function (err, b) { data.bro.evaluate('document.querySelector(\'select[name="accountNumber"]\').form.submit()'); data.bro.wait(cb); }); }); } function deselectAllAccounts(bro, cb) { var selectedOptions = bro.querySelectorAll('select[name=accountNumber]'); bro.evaluate('Array.prototype.slice.call(document.querySelector(\'select[name="accountNumber"]\')).filter(function(op) { op.removeAttribute(\'selected\') });'); bro.wait(cb); // selectedOptions.map(function (option) { // var value = option.getAttribute('value'); // option.removeAttribute('selected'); // }); // bro.evaluate('document.querySelector(\'select[name="accountNumber"]\').form.submit()'); }