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
JavaScript
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()');
}