const puppeteer = require("puppeteer"); const luxon = require("luxon"); const fs = require("fs"); const path = require("path"); const dotenv = require("dotenv").config({ path: __dirname + "/.env" }); const utils = require("./utils"); (async () => { console.log( `===========< STARTED ${utils.getPakistanStandardTime( luxon.DateTime.now() )} >=========` ); /** * loading config data */ const config = JSON.parse(fs.readFileSync(__dirname + "/config.json")); const environment = process.env["ENVIRONMENT"]; const browser = await puppeteer.launch({ headless: "new", args: ["--no-sandbox", "--disable-setuid-sandbox"] }); const page = await browser.newPage(); await page.goto( config[environment].psw_url, { waitUntil: "domcontentloaded", timeout: 0 } ); await page.waitForSelector("tbody tr.ItemStyle"); const data = await page.evaluate(() => { const rows = document.querySelectorAll( "tbody tr.ItemStyle, tbody tr.AlternatingItemStyle" ); return Array.from(rows).map(row => { const cells = row.querySelectorAll("td"); const finNo = cells[0]?.querySelector("label")?.innerText.trim() || cells[0]?.innerText.trim(); return { financialInstrumentNo: finNo, date: cells[1]?.innerText.trim(), authorizedDealer: cells[2]?.innerText.trim(), consigneeName: cells[3]?.innerText.trim(), invoiceValue: cells[4]?.innerText.trim(), currency: cells[6]?.innerText.trim(), status: cells[7]?.innerText.trim(), balance: cells[8]?.innerText.trim() }; }); }); const jsonDir = path.join(config[environment].psw_fi_invoices_path, "data/unprocessed"); fs.mkdirSync(jsonDir, { recursive: true }); const outputFile = path.join(jsonDir, `${luxon.DateTime.now().toMillis()}.json`); fs.writeFileSync(outputFile, JSON.stringify(data, null, 2)); console.log(`Saved JSON to ${outputFile}`); await page.close(); await browser.close(); })();