israeli-bank-scrapers-core
Version:
Provide scrapers for all major Israeli banks and credit card companies
111 lines (110 loc) • 14.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.clickButton = clickButton;
exports.clickLink = clickLink;
exports.dropdownElements = dropdownElements;
exports.dropdownSelect = dropdownSelect;
exports.elementPresentOnPage = elementPresentOnPage;
exports.fillInput = fillInput;
exports.pageEval = pageEval;
exports.pageEvalAll = pageEvalAll;
exports.setValue = setValue;
exports.waitUntilElementDisappear = waitUntilElementDisappear;
exports.waitUntilElementFound = waitUntilElementFound;
exports.waitUntilIframeFound = waitUntilIframeFound;
var _waiting = require("./waiting");
async function waitUntilElementFound(page, elementSelector, onlyVisible = false, timeout) {
await page.waitForSelector(elementSelector, {
visible: onlyVisible,
timeout
});
}
async function waitUntilElementDisappear(page, elementSelector, timeout) {
await page.waitForSelector(elementSelector, {
hidden: true,
timeout
});
}
async function waitUntilIframeFound(page, framePredicate, description = '', timeout = 30000) {
let frame;
await (0, _waiting.waitUntil)(() => {
frame = page.frames().find(framePredicate);
return Promise.resolve(!!frame);
}, description, timeout, 1000);
if (!frame) {
throw new Error('failed to find iframe');
}
return frame;
}
async function fillInput(pageOrFrame, inputSelector, inputValue) {
await pageOrFrame.$eval(inputSelector, input => {
const inputElement = input;
// @ts-ignore
inputElement.value = '';
});
await pageOrFrame.type(inputSelector, inputValue);
}
async function setValue(pageOrFrame, inputSelector, inputValue) {
await pageOrFrame.$eval(inputSelector, (input, value) => {
const inputElement = input;
// @ts-ignore
inputElement.value = value;
}, [inputValue]);
}
async function clickButton(page, buttonSelector) {
await page.$eval(buttonSelector, el => el.click());
}
async function clickLink(page, aSelector) {
await page.$eval(aSelector, el => {
if (!el || typeof el.click === 'undefined') {
return;
}
el.click();
});
}
async function pageEvalAll(page, selector, defaultResult, callback, ...args) {
let result = defaultResult;
try {
await page.waitForFunction(() => document.readyState === 'complete');
result = await page.$$eval(selector, callback, ...args);
} catch (e) {
// TODO temporary workaround to puppeteer@1.5.0 which breaks $$eval bevahvior until they will release a new version.
if (!e.message.startsWith('Error: failed to find elements matching selector')) {
throw e;
}
}
return result;
}
async function pageEval(pageOrFrame, selector, defaultResult, callback, ...args) {
let result = defaultResult;
try {
await pageOrFrame.waitForFunction(() => document.readyState === 'complete');
result = await pageOrFrame.$eval(selector, callback, ...args);
} catch (e) {
// TODO temporary workaround to puppeteer@1.5.0 which breaks $$eval bevahvior until they will release a new version.
if (!e.message.startsWith('Error: failed to find element matching selector')) {
throw e;
}
}
return result;
}
async function elementPresentOnPage(pageOrFrame, selector) {
return (await pageOrFrame.$(selector)) !== null;
}
async function dropdownSelect(page, selectSelector, value) {
await page.select(selectSelector, value);
}
async function dropdownElements(page, selector) {
const options = await page.evaluate(optionSelector => {
return Array.from(document.querySelectorAll(optionSelector)).filter(o => o.value).map(o => {
return {
name: o.text,
value: o.value
};
});
}, `${selector} > option`);
return options;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2FpdGluZyIsInJlcXVpcmUiLCJ3YWl0VW50aWxFbGVtZW50Rm91bmQiLCJwYWdlIiwiZWxlbWVudFNlbGVjdG9yIiwib25seVZpc2libGUiLCJ0aW1lb3V0Iiwid2FpdEZvclNlbGVjdG9yIiwidmlzaWJsZSIsIndhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIiLCJoaWRkZW4iLCJ3YWl0VW50aWxJZnJhbWVGb3VuZCIsImZyYW1lUHJlZGljYXRlIiwiZGVzY3JpcHRpb24iLCJmcmFtZSIsIndhaXRVbnRpbCIsImZyYW1lcyIsImZpbmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiZmlsbElucHV0IiwicGFnZU9yRnJhbWUiLCJpbnB1dFNlbGVjdG9yIiwiaW5wdXRWYWx1ZSIsIiRldmFsIiwiaW5wdXQiLCJpbnB1dEVsZW1lbnQiLCJ2YWx1ZSIsInR5cGUiLCJzZXRWYWx1ZSIsImNsaWNrQnV0dG9uIiwiYnV0dG9uU2VsZWN0b3IiLCJlbCIsImNsaWNrIiwiY2xpY2tMaW5rIiwiYVNlbGVjdG9yIiwicGFnZUV2YWxBbGwiLCJzZWxlY3RvciIsImRlZmF1bHRSZXN1bHQiLCJjYWxsYmFjayIsImFyZ3MiLCJyZXN1bHQiLCJ3YWl0Rm9yRnVuY3Rpb24iLCJkb2N1bWVudCIsInJlYWR5U3RhdGUiLCIkJGV2YWwiLCJlIiwibWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJwYWdlRXZhbCIsImVsZW1lbnRQcmVzZW50T25QYWdlIiwiJCIsImRyb3Bkb3duU2VsZWN0Iiwic2VsZWN0U2VsZWN0b3IiLCJzZWxlY3QiLCJkcm9wZG93bkVsZW1lbnRzIiwib3B0aW9ucyIsImV2YWx1YXRlIiwib3B0aW9uU2VsZWN0b3IiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZmlsdGVyIiwibyIsIm1hcCIsIm5hbWUiLCJ0ZXh0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRnJhbWUsIHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlci1jb3JlJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4vd2FpdGluZyc7XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChcbiAgcGFnZTogUGFnZSB8IEZyYW1lLFxuICBlbGVtZW50U2VsZWN0b3I6IHN0cmluZyxcbiAgb25seVZpc2libGUgPSBmYWxzZSxcbiAgdGltZW91dD86IG51bWJlcixcbikge1xuICBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IsIHsgdmlzaWJsZTogb25seVZpc2libGUsIHRpbWVvdXQgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIocGFnZTogUGFnZSwgZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yLCB7IGhpZGRlbjogdHJ1ZSwgdGltZW91dCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdFVudGlsSWZyYW1lRm91bmQoXG4gIHBhZ2U6IFBhZ2UsXG4gIGZyYW1lUHJlZGljYXRlOiAoZnJhbWU6IEZyYW1lKSA9PiBib29sZWFuLFxuICBkZXNjcmlwdGlvbiA9ICcnLFxuICB0aW1lb3V0ID0gMzAwMDAsXG4pIHtcbiAgbGV0IGZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgYXdhaXQgd2FpdFVudGlsKFxuICAgICgpID0+IHtcbiAgICAgIGZyYW1lID0gcGFnZS5mcmFtZXMoKS5maW5kKGZyYW1lUHJlZGljYXRlKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoISFmcmFtZSk7XG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICB0aW1lb3V0LFxuICAgIDEwMDAsXG4gICk7XG5cbiAgaWYgKCFmcmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGZpbmQgaWZyYW1lJyk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGxJbnB1dChwYWdlT3JGcmFtZTogUGFnZSB8IEZyYW1lLCBpbnB1dFNlbGVjdG9yOiBzdHJpbmcsIGlucHV0VmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwYWdlT3JGcmFtZS4kZXZhbChpbnB1dFNlbGVjdG9yLCAoaW5wdXQ6IEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBpbnB1dDtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaW5wdXRFbGVtZW50LnZhbHVlID0gJyc7XG4gIH0pO1xuICBhd2FpdCBwYWdlT3JGcmFtZS50eXBlKGlucHV0U2VsZWN0b3IsIGlucHV0VmFsdWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRWYWx1ZShwYWdlT3JGcmFtZTogUGFnZSB8IEZyYW1lLCBpbnB1dFNlbGVjdG9yOiBzdHJpbmcsIGlucHV0VmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwYWdlT3JGcmFtZS4kZXZhbChcbiAgICBpbnB1dFNlbGVjdG9yLFxuICAgIChpbnB1dDogRWxlbWVudCwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGlucHV0O1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfSxcbiAgICBbaW5wdXRWYWx1ZV0sXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrQnV0dG9uKHBhZ2U6IFBhZ2UgfCBGcmFtZSwgYnV0dG9uU2VsZWN0b3I6IHN0cmluZykge1xuICBhd2FpdCBwYWdlLiRldmFsKGJ1dHRvblNlbGVjdG9yLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGlja0xpbmsocGFnZTogUGFnZSwgYVNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgYXdhaXQgcGFnZS4kZXZhbChhU2VsZWN0b3IsIChlbDogYW55KSA9PiB7XG4gICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwuY2xpY2sgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWwuY2xpY2soKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2VFdmFsQWxsPFI+KFxuICBwYWdlOiBQYWdlIHwgRnJhbWUsXG4gIHNlbGVjdG9yOiBzdHJpbmcsXG4gIGRlZmF1bHRSZXN1bHQ6IGFueSxcbiAgY2FsbGJhY2s6IChlbGVtZW50czogRWxlbWVudFtdLCAuLi5hcmdzOiBhbnkpID0+IFIsXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IHJlc3VsdCA9IGRlZmF1bHRSZXN1bHQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGFnZS53YWl0Rm9yRnVuY3Rpb24oKCkgPT4gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcGFnZS4kJGV2YWwoc2VsZWN0b3IsIGNhbGxiYWNrLCAuLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gcHVwcGV0ZWVyQDEuNS4wIHdoaWNoIGJyZWFrcyAkJGV2YWwgYmV2YWh2aW9yIHVudGlsIHRoZXkgd2lsbCByZWxlYXNlIGEgbmV3IHZlcnNpb24uXG4gICAgaWYgKCEoZSBhcyBFcnJvcikubWVzc2FnZS5zdGFydHNXaXRoKCdFcnJvcjogZmFpbGVkIHRvIGZpbmQgZWxlbWVudHMgbWF0Y2hpbmcgc2VsZWN0b3InKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdlRXZhbDxSPihcbiAgcGFnZU9yRnJhbWU6IFBhZ2UgfCBGcmFtZSxcbiAgc2VsZWN0b3I6IHN0cmluZyxcbiAgZGVmYXVsdFJlc3VsdDogYW55LFxuICBjYWxsYmFjazogKGVsZW1lbnRzOiBFbGVtZW50LCAuLi5hcmdzOiBhbnkpID0+IFIsXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IHJlc3VsdCA9IGRlZmF1bHRSZXN1bHQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGFnZU9yRnJhbWUud2FpdEZvckZ1bmN0aW9uKCgpID0+IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpO1xuICAgIHJlc3VsdCA9IGF3YWl0IHBhZ2VPckZyYW1lLiRldmFsKHNlbGVjdG9yLCBjYWxsYmFjaywgLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHB1cHBldGVlckAxLjUuMCB3aGljaCBicmVha3MgJCRldmFsIGJldmFodmlvciB1bnRpbCB0aGV5IHdpbGwgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uLlxuICAgIGlmICghKGUgYXMgRXJyb3IpLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRXJyb3I6IGZhaWxlZCB0byBmaW5kIGVsZW1lbnQgbWF0Y2hpbmcgc2VsZWN0b3InKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBlbGVtZW50UHJlc2VudE9uUGFnZShwYWdlT3JGcmFtZTogUGFnZSB8IEZyYW1lLCBzZWxlY3Rvcjogc3RyaW5nKSB7XG4gIHJldHVybiAoYXdhaXQgcGFnZU9yRnJhbWUuJChzZWxlY3RvcikpICE9PSBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkcm9wZG93blNlbGVjdChwYWdlOiBQYWdlLCBzZWxlY3RTZWxlY3Rvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gIGF3YWl0IHBhZ2Uuc2VsZWN0KHNlbGVjdFNlbGVjdG9yLCB2YWx1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3Bkb3duRWxlbWVudHMocGFnZTogUGFnZSwgc2VsZWN0b3I6IHN0cmluZykge1xuICBjb25zdCBvcHRpb25zID0gYXdhaXQgcGFnZS5ldmFsdWF0ZShvcHRpb25TZWxlY3RvciA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MT3B0aW9uRWxlbWVudD4ob3B0aW9uU2VsZWN0b3IpKVxuICAgICAgLmZpbHRlcihvID0+IG8udmFsdWUpXG4gICAgICAubWFwKG8gPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG8udGV4dCxcbiAgICAgICAgICB2YWx1ZTogby52YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9LCBgJHtzZWxlY3Rvcn0gPiBvcHRpb25gKTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCB7XG4gIGNsaWNrQnV0dG9uLFxuICBjbGlja0xpbmssXG4gIGRyb3Bkb3duRWxlbWVudHMsXG4gIGRyb3Bkb3duU2VsZWN0LFxuICBlbGVtZW50UHJlc2VudE9uUGFnZSxcbiAgZmlsbElucHV0LFxuICBwYWdlRXZhbCxcbiAgcGFnZUV2YWxBbGwsXG4gIHNldFZhbHVlLFxuICB3YWl0VW50aWxFbGVtZW50RGlzYXBwZWFyLFxuICB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG4gIHdhaXRVbnRpbElmcmFtZUZvdW5kLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFFQSxlQUFlQyxxQkFBcUJBLENBQ2xDQyxJQUFrQixFQUNsQkMsZUFBdUIsRUFDdkJDLFdBQVcsR0FBRyxLQUFLLEVBQ25CQyxPQUFnQixFQUNoQjtFQUNBLE1BQU1ILElBQUksQ0FBQ0ksZUFBZSxDQUFDSCxlQUFlLEVBQUU7SUFBRUksT0FBTyxFQUFFSCxXQUFXO0lBQUVDO0VBQVEsQ0FBQyxDQUFDO0FBQ2hGO0FBRUEsZUFBZUcseUJBQXlCQSxDQUFDTixJQUFVLEVBQUVDLGVB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QUNGO0VBRUEsT0FBT0wsTUFBTTtBQUNmO0FBRUEsZUFBZVEsUUFBUUEsQ0FDckI1QixXQUF5QixFQUN6QmdCLFFBQWdCLEVBQ2hCQyxhQUFrQixFQUNsQkMsUUFBZ0QsRUFDaEQsR0FBR0MsSUFBVyxFQUNGO0VBQ1osSUFBSUMsTUFBTSxHQUFHSCxhQUFhO0VBQzFCLElBQUk7SUFDRixNQUFNakIsV0FBVyxDQUFDcUIsZUFBZSxDQUFDLE1BQU1DLFFBQVEsQ0FBQ0MsVUFBVSxLQUFLLFVBQVUsQ0FBQztJQUMzRUgsTUFBTSxHQUFHLE1BQU1wQixXQUFXLENBQUNHLEtBQUssQ0FBQ2EsUUFBUSxFQUFFRSxRQUFRLEVBQUUsR0FBR0MsSUFBSSxDQUFDO0VBQy9ELENBQUMsQ0FBQyxPQUFPTSxDQUFDLEVBQUU7SUFDVjtJQUNBLElBQUksQ0FBRUEsQ0FBQyxDQUFXQyxPQUFPLENBQUNDLFVBQVUsQ0FBQyxpREFBaUQsQ0FBQyxFQUFFO01BQ3ZGLE1BQU1GLENBQUM7SUFDVDtFQUNGO0VBRUEsT0FBT0wsTUFBTTtBQUNmO0FBRUEsZUFBZVMsb0JBQW9CQSxDQUFDN0IsV0FBeUIsRUFBRWdCLFFBQWdCLEVBQUU7RUFDL0UsT0FBTyxDQUFDLE1BQU1oQixXQUFXLENBQUM4QixDQUFDLENBQUNkLFFBQVEsQ0FBQyxNQUFNLElBQUk7QUFDakQ7QUFFQSxlQUFlZSxjQUFjQSxDQUFDbEQsSUFBVSxFQUFFbUQsY0FBc0IsRUFBRTFCLEtBQWEsRUFBRTtFQUMvRSxNQUFNekIsSUFBSSxDQUFDb0QsTUFBTSxDQUFDRCxjQUFjLEVBQUUxQixLQUFLLENBQUM7QUFDMUM7QUFFQSxlQUFlNEIsZ0JBQWdCQSxDQUFDckQsSUFBVSxFQUFFbUMsUUFBZ0IsRUFBRTtFQUM1RCxNQUFNbUIsT0FBTyxHQUFHLE1BQU10RCxJQUFJLENBQUN1RCxRQUFRLENBQUNDLGNBQWMsSUFBSTtJQUNwRCxPQUFPQyxLQUFLLENBQUNDLElBQUksQ0FBQ2pCLFFBQVEsQ0FBQ2tCLGdCQUFnQixDQUFvQkgsY0FBYyxDQUFDLENBQUMsQ0FDNUVJLE1BQU0sQ0FBQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUNwQyxLQUFLLENBQUMsQ0FDcEJxQyxHQUFHLENBQUNELENBQUMsSUFBSTtNQUNSLE9BQU87UUFDTEUsSUFBSSxFQUFFRixDQUFDLENBQUNHLElBQUk7UUFDWnZDLEtBQUssRUFBRW9DLENBQUMsQ0FBQ3BDO01BQ1gsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNOLENBQUMsRUFBRSxHQUFHVSxRQUFRLFdBQVcsQ0FBQztFQUMxQixPQUFPbUIsT0FBTztBQUNoQiIsImlnbm9yZUxpc3QiOltdfQ==