israeli-bank-scrapers
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2FpdGluZyIsInJlcXVpcmUiLCJ3YWl0VW50aWxFbGVtZW50Rm91bmQiLCJwYWdlIiwiZWxlbWVudFNlbGVjdG9yIiwib25seVZpc2libGUiLCJ0aW1lb3V0Iiwid2FpdEZvclNlbGVjdG9yIiwidmlzaWJsZSIsIndhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIiLCJoaWRkZW4iLCJ3YWl0VW50aWxJZnJhbWVGb3VuZCIsImZyYW1lUHJlZGljYXRlIiwiZGVzY3JpcHRpb24iLCJmcmFtZSIsIndhaXRVbnRpbCIsImZyYW1lcyIsImZpbmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiZmlsbElucHV0IiwicGFnZU9yRnJhbWUiLCJpbnB1dFNlbGVjdG9yIiwiaW5wdXRWYWx1ZSIsIiRldmFsIiwiaW5wdXQiLCJpbnB1dEVsZW1lbnQiLCJ2YWx1ZSIsInR5cGUiLCJzZXRWYWx1ZSIsImNsaWNrQnV0dG9uIiwiYnV0dG9uU2VsZWN0b3IiLCJlbCIsImNsaWNrIiwiY2xpY2tMaW5rIiwiYVNlbGVjdG9yIiwicGFnZUV2YWxBbGwiLCJzZWxlY3RvciIsImRlZmF1bHRSZXN1bHQiLCJjYWxsYmFjayIsImFyZ3MiLCJyZXN1bHQiLCJ3YWl0Rm9yRnVuY3Rpb24iLCJkb2N1bWVudCIsInJlYWR5U3RhdGUiLCIkJGV2YWwiLCJlIiwibWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJwYWdlRXZhbCIsImVsZW1lbnRQcmVzZW50T25QYWdlIiwiJCIsImRyb3Bkb3duU2VsZWN0Iiwic2VsZWN0U2VsZWN0b3IiLCJzZWxlY3QiLCJkcm9wZG93bkVsZW1lbnRzIiwib3B0aW9ucyIsImV2YWx1YXRlIiwib3B0aW9uU2VsZWN0b3IiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZmlsdGVyIiwibyIsIm1hcCIsIm5hbWUiLCJ0ZXh0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRnJhbWUsIHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyB3YWl0VW50aWwgfSBmcm9tICcuL3dhaXRpbmcnO1xuXG5hc3luYyBmdW5jdGlvbiB3YWl0VW50aWxFbGVtZW50Rm91bmQoXG4gIHBhZ2U6IFBhZ2UgfCBGcmFtZSxcbiAgZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcsXG4gIG9ubHlWaXNpYmxlID0gZmFsc2UsXG4gIHRpbWVvdXQ/OiBudW1iZXIsXG4pIHtcbiAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yLCB7IHZpc2libGU6IG9ubHlWaXNpYmxlLCB0aW1lb3V0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0VW50aWxFbGVtZW50RGlzYXBwZWFyKHBhZ2U6IFBhZ2UsIGVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyKSB7XG4gIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKGVsZW1lbnRTZWxlY3RvciwgeyBoaWRkZW46IHRydWUsIHRpbWVvdXQgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRVbnRpbElmcmFtZUZvdW5kKFxuICBwYWdlOiBQYWdlLFxuICBmcmFtZVByZWRpY2F0ZTogKGZyYW1lOiBGcmFtZSkgPT4gYm9vbGVhbixcbiAgZGVzY3JpcHRpb24gPSAnJyxcbiAgdGltZW91dCA9IDMwMDAwLFxuKSB7XG4gIGxldCBmcmFtZTogRnJhbWUgfCB1bmRlZmluZWQ7XG4gIGF3YWl0IHdhaXRVbnRpbChcbiAgICAoKSA9PiB7XG4gICAgICBmcmFtZSA9IHBhZ2UuZnJhbWVzKCkuZmluZChmcmFtZVByZWRpY2F0ZSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEhZnJhbWUpO1xuICAgIH0sXG4gICAgZGVzY3JpcHRpb24sXG4gICAgdGltZW91dCxcbiAgICAxMDAwLFxuICApO1xuXG4gIGlmICghZnJhbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBmaW5kIGlmcmFtZScpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxsSW5wdXQocGFnZU9yRnJhbWU6IFBhZ2UgfCBGcmFtZSwgaW5wdXRTZWxlY3Rvcjogc3RyaW5nLCBpbnB1dFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcGFnZU9yRnJhbWUuJGV2YWwoaW5wdXRTZWxlY3RvciwgKGlucHV0OiBFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gaW5wdXQ7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xuICB9KTtcbiAgYXdhaXQgcGFnZU9yRnJhbWUudHlwZShpbnB1dFNlbGVjdG9yLCBpbnB1dFZhbHVlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0VmFsdWUocGFnZU9yRnJhbWU6IFBhZ2UgfCBGcmFtZSwgaW5wdXRTZWxlY3Rvcjogc3RyaW5nLCBpbnB1dFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcGFnZU9yRnJhbWUuJGV2YWwoXG4gICAgaW5wdXRTZWxlY3RvcixcbiAgICAoaW5wdXQ6IEVsZW1lbnQsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBpbnB1dDtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH0sXG4gICAgW2lucHV0VmFsdWVdLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGlja0J1dHRvbihwYWdlOiBQYWdlIHwgRnJhbWUsIGJ1dHRvblNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgYXdhaXQgcGFnZS4kZXZhbChidXR0b25TZWxlY3RvciwgZWwgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xpY2tMaW5rKHBhZ2U6IFBhZ2UsIGFTZWxlY3Rvcjogc3RyaW5nKSB7XG4gIGF3YWl0IHBhZ2UuJGV2YWwoYVNlbGVjdG9yLCAoZWw6IGFueSkgPT4ge1xuICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLmNsaWNrID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsLmNsaWNrKCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdlRXZhbEFsbDxSPihcbiAgcGFnZTogUGFnZSB8IEZyYW1lLFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBkZWZhdWx0UmVzdWx0OiBhbnksXG4gIGNhbGxiYWNrOiAoZWxlbWVudHM6IEVsZW1lbnRbXSwgLi4uYXJnczogYW55KSA9PiBSLFxuICAuLi5hcmdzOiBhbnlbXVxuKTogUHJvbWlzZTxSPiB7XG4gIGxldCByZXN1bHQgPSBkZWZhdWx0UmVzdWx0O1xuICB0cnkge1xuICAgIGF3YWl0IHBhZ2Uud2FpdEZvckZ1bmN0aW9uKCgpID0+IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpO1xuICAgIHJlc3VsdCA9IGF3YWl0IHBhZ2UuJCRldmFsKHNlbGVjdG9yLCBjYWxsYmFjaywgLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHB1cHBldGVlckAxLjUuMCB3aGljaCBicmVha3MgJCRldmFsIGJldmFodmlvciB1bnRpbCB0aGV5IHdpbGwgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uLlxuICAgIGlmICghKGUgYXMgRXJyb3IpLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRXJyb3I6IGZhaWxlZCB0byBmaW5kIGVsZW1lbnRzIG1hdGNoaW5nIHNlbGVjdG9yJykpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnZUV2YWw8Uj4oXG4gIHBhZ2VPckZyYW1lOiBQYWdlIHwgRnJhbWUsXG4gIHNlbGVjdG9yOiBzdHJpbmcsXG4gIGRlZmF1bHRSZXN1bHQ6IGFueSxcbiAgY2FsbGJhY2s6IChlbGVtZW50czogRWxlbWVudCwgLi4uYXJnczogYW55KSA9PiBSLFxuICAuLi5hcmdzOiBhbnlbXVxuKTogUHJvbWlzZTxSPiB7XG4gIGxldCByZXN1bHQgPSBkZWZhdWx0UmVzdWx0O1xuICB0cnkge1xuICAgIGF3YWl0IHBhZ2VPckZyYW1lLndhaXRGb3JGdW5jdGlvbigoKSA9PiBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKTtcbiAgICByZXN1bHQgPSBhd2FpdCBwYWdlT3JGcmFtZS4kZXZhbChzZWxlY3RvciwgY2FsbGJhY2ssIC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBwdXBwZXRlZXJAMS41LjAgd2hpY2ggYnJlYWtzICQkZXZhbCBiZXZhaHZpb3IgdW50aWwgdGhleSB3aWxsIHJlbGVhc2UgYSBuZXcgdmVyc2lvbi5cbiAgICBpZiAoIShlIGFzIEVycm9yKS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0Vycm9yOiBmYWlsZWQgdG8gZmluZCBlbGVtZW50IG1hdGNoaW5nIHNlbGVjdG9yJykpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZWxlbWVudFByZXNlbnRPblBhZ2UocGFnZU9yRnJhbWU6IFBhZ2UgfCBGcmFtZSwgc2VsZWN0b3I6IHN0cmluZykge1xuICByZXR1cm4gKGF3YWl0IHBhZ2VPckZyYW1lLiQoc2VsZWN0b3IpKSAhPT0gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZHJvcGRvd25TZWxlY3QocGFnZTogUGFnZSwgc2VsZWN0U2VsZWN0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICBhd2FpdCBwYWdlLnNlbGVjdChzZWxlY3RTZWxlY3RvciwgdmFsdWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkcm9wZG93bkVsZW1lbnRzKHBhZ2U6IFBhZ2UsIHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBhZ2UuZXZhbHVhdGUob3B0aW9uU2VsZWN0b3IgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTE9wdGlvbkVsZW1lbnQ+KG9wdGlvblNlbGVjdG9yKSlcbiAgICAgIC5maWx0ZXIobyA9PiBvLnZhbHVlKVxuICAgICAgLm1hcChvID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBvLnRleHQsXG4gICAgICAgICAgdmFsdWU6IG8udmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfSwgYCR7c2VsZWN0b3J9ID4gb3B0aW9uYCk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5leHBvcnQge1xuICBjbGlja0J1dHRvbixcbiAgY2xpY2tMaW5rLFxuICBkcm9wZG93bkVsZW1lbnRzLFxuICBkcm9wZG93blNlbGVjdCxcbiAgZWxlbWVudFByZXNlbnRPblBhZ2UsXG4gIGZpbGxJbnB1dCxcbiAgcGFnZUV2YWwsXG4gIHBhZ2VFdmFsQWxsLFxuICBzZXRWYWx1ZSxcbiAgd2FpdFVudGlsRWxlbWVudERpc2FwcGVhcixcbiAgd2FpdFVudGlsRWxlbWVudEZvdW5kLFxuICB3YWl0VW50aWxJZnJhbWVGb3VuZCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBRUEsZUFBZUMscUJBQXFCQSxDQUNsQ0MsSUFBa0IsRUFDbEJDLGVBQXVCLEVBQ3ZCQyxXQUFXLEdBQUcsS0FBSyxFQUNuQkMsT0FBZ0IsRUFDaEI7RUFDQSxNQUFNSCxJQUFJLENBQUNJLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFO0lBQUVJLE9BQU8sRUFBRUgsV0FBVztJQUFFQztFQUFRLENBQUMsQ0FBQztBQUNoRjtBQUVBLGVBQWVHLHlCQUF5QkEsQ0FBQ04sSUFBVSxFQUFFQyxlQUF1QixF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