File size: 1,394 Bytes
e60e8d0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
async function getSource({ url, proxy }) {
return new Promise(async (resolve, reject) => {
if (!url) return reject("Missing url parameter");
let isResolved = false;
const context = await global.browser.createBrowserContext().catch(() => null);
if (!context) return reject("Failed to create browser context");
const page = await context.newPage();
try {
await page.setRequestInterception(true);
page.on("request", (request) => {
try {
request.continue();
} catch (err) {
console.warn("Request interception error:", err);
}
});
page.on("response", async (res) => {
try {
if ([200, 302].includes(res.status()) && [url, url + "/"].includes(res.url())) {
await page.waitForNavigation({ waitUntil: "load", timeout: 5000 }).catch(() => {});
const html = await page.content();
isResolved = true;
await page.close();
resolve({ source: html });
}
} catch (e) {
console.error("Error processing response:", e);
}
});
await page.goto(url, { waitUntil: "domcontentloaded" });
} catch (e) {
console.error("Error in getSource:", e.message);
if (!isResolved) {
await page.close();
reject(e.message);
}
}
});
}
module.exports = getSource;
|