153 lines
4.2 KiB
JavaScript
153 lines
4.2 KiB
JavaScript
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 delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
|
|
const utils = require("./utils");
|
|
|
|
(async () => {
|
|
|
|
console.log(
|
|
`===========< STARTED ${utils.getPakistanStandardTime(
|
|
luxon.DateTime.now()
|
|
)} >=========`
|
|
);
|
|
|
|
const syncDate = luxon.DateTime.now().toFormat("yyyy-MM-dd");
|
|
|
|
const screenshotDirectory = path.join(__dirname, `screenshots/psw/${syncDate}`);
|
|
|
|
if (!fs.existsSync(screenshotDirectory)) {
|
|
fs.mkdirSync(screenshotDirectory, { recursive: true });
|
|
}
|
|
|
|
|
|
/**
|
|
* loading config data
|
|
*/
|
|
const config = JSON.parse(fs.readFileSync(__dirname + "/config.json"));
|
|
const environment = process.env["ENVIRONMENT"];
|
|
|
|
|
|
// launch browser and open page
|
|
const chromeProfilePath = path.resolve(
|
|
__dirname,
|
|
config[environment]["chrome_profile_path"]
|
|
);
|
|
const browser = await puppeteer.launch(
|
|
utils.getBrowserConfig(chromeProfilePath, environment)
|
|
);
|
|
const page = await browser.newPage();
|
|
await page.setViewport({
|
|
width: 1600,
|
|
height: 900,
|
|
});
|
|
|
|
// Inject CSS to show the cursor
|
|
await page.evaluate(() => {
|
|
const style = document.createElement("style");
|
|
style.innerHTML = "* { cursor: auto !important; }";
|
|
document.head.appendChild(style);
|
|
});
|
|
|
|
await page.goto("https://www.google.com", {
|
|
waitUntil: "domcontentloaded",
|
|
timeout: 0
|
|
});
|
|
|
|
// wait for 3 sec
|
|
console.log("Waiting 3 sec and taking screenshot");
|
|
await new Promise((resolve) => setTimeout(resolve, 3 * 1000));
|
|
|
|
// take screenshot
|
|
let screenshotPath = path.join(
|
|
screenshotDirectory,
|
|
`${luxon.DateTime.now().toMillis()}.png`
|
|
);
|
|
|
|
await page.screenshot({ path: screenshotPath, fullPage: true });
|
|
|
|
await page.goto(
|
|
config[environment].psw_url,
|
|
{
|
|
waitUntil: "domcontentloaded",
|
|
timeout: 0
|
|
});
|
|
|
|
// wait for 3 sec
|
|
console.log("Waiting 3 sec and taking screenshot.");
|
|
await new Promise((resolve) => setTimeout(resolve, 3 * 1000));
|
|
|
|
// take screenshot
|
|
screenshotPath = path.join(
|
|
screenshotDirectory,
|
|
`${luxon.DateTime.now().toMillis()}.png`
|
|
);
|
|
await page.screenshot({ path: screenshotPath, fullPage: true });
|
|
|
|
await page.waitForSelector("tbody tr.ItemStyle", { timeout: 30000 });
|
|
|
|
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()
|
|
};
|
|
});
|
|
});
|
|
|
|
// wait for 3 sec
|
|
console.log("Waiting 3 sec and taking screenshot..");
|
|
await new Promise((resolve) => setTimeout(resolve, 3 * 1000));
|
|
|
|
// take screenshot
|
|
screenshotPath = path.join(
|
|
screenshotDirectory,
|
|
`${luxon.DateTime.now().toMillis()}.png`
|
|
);
|
|
|
|
await page.screenshot({ path: screenshotPath, fullPage: true });
|
|
|
|
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}`);
|
|
|
|
console.log("Waiting 5 sec and taking screenshot before closing browser...");
|
|
// wait for 5 sec
|
|
await new Promise((resolve) => setTimeout(resolve, 5 * 1000));
|
|
|
|
// take screenshot
|
|
screenshotPath = path.join(
|
|
screenshotDirectory,
|
|
`${luxon.DateTime.now().toMillis()}.png`
|
|
);
|
|
|
|
await page.screenshot({ path: screenshotPath, fullPage: true });
|
|
|
|
await page.close();
|
|
await browser.close();
|
|
|
|
})();
|