@accounter/modern-poalim-scraper
Version:
Modern scraper for Israeli banks (Hapoalim, Isracard, Max)
46 lines • 2.19 kB
JavaScript
import { chromium } from 'playwright';
import { getAccounts } from './accounts.js';
import { getCreditCardTransactions } from './credit-card-transactions.js';
import { getCreditCards } from './credit-cards.js';
import { getForeignTransactions } from './foreign-transactions.js';
import { getIlsTransactions } from './ils-transactions.js';
import { loginAndGetUserData } from './login-fetch-user-data.js';
const DEFAULT_OPTIONS = {
fetchIlsTransactions: true,
fetchForeignTransactions: true,
fetchCreditCards: true,
fetchInvestments: true,
validateSchema: false,
};
export async function otsarHahayal(credentials, userOptions) {
const now = new Date();
const fromDate = new Date(now.getFullYear(), now.getMonth() - 24, now.getDate() + 1).toISOString();
const options = { ...DEFAULT_OPTIONS, fromDate, toDate: now.toISOString(), ...userOptions };
const browser = await chromium.launch({ headless: options.headless === true });
const context = await browser.newContext({ acceptDownloads: true });
const page = await context.newPage();
// after 5 min close the browser to prevent hanging in case of unforeseen issues
const timeoutId = setTimeout(async () => {
console.warn('Otsar Hahayal scraper timed out after 5 minutes. Closing browser.');
await browser.close();
}, 5 * 60 * 1000);
const headers = await loginAndGetUserData(credentials, page);
return {
// accounts
getAccounts: async () => getAccounts(page, options),
// local transactions
ilsTransactions: async (account) => getIlsTransactions(page, headers, options, account),
// foreign transactions
foreignTransactions: async () => getForeignTransactions(page, options),
// credit cards
getCreditCards: async () => getCreditCards(page, options, headers),
// credit card transactions
getCreditCardTransactions: async (card, month) => getCreditCardTransactions(page, headers, options, card, month),
// investments
close: async () => {
clearTimeout(timeoutId);
await browser.close();
},
};
}
//# sourceMappingURL=index.js.map