|
|
|
|
|
const { connect } = require("puppeteer-real-browser"); |
|
|
|
|
|
async function createBrowser(retry = 0) { |
|
|
try { |
|
|
|
|
|
|
|
|
if (global.finished) return; |
|
|
|
|
|
|
|
|
|
|
|
if (global.browser) { |
|
|
console.log("Browser is already connected."); |
|
|
return; |
|
|
} |
|
|
|
|
|
console.log("Launching new browser instance..."); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { browser: _browser } = await connect({ |
|
|
headless: false, |
|
|
turnstile: true, |
|
|
connectOption: { defaultViewport: null }, |
|
|
disableXvfb: false, |
|
|
}); |
|
|
|
|
|
|
|
|
global.browser = _browser; |
|
|
|
|
|
|
|
|
browser.on("disconnected", async () => { |
|
|
if (global.finished) return; |
|
|
console.log("Browser disconnected. Attempting to restart browser..."); |
|
|
global.browser = null; |
|
|
|
|
|
await createBrowser(); |
|
|
}); |
|
|
|
|
|
console.log("Browser launched successfully and ready for use."); |
|
|
} catch (e) { |
|
|
console.error("Error launching browser:", e.stack); |
|
|
|
|
|
|
|
|
if (global.finished || retry >= 5) { |
|
|
console.error("Max retries reached or application is shutting down. Could not launch browser."); |
|
|
global.browser = null; |
|
|
return; |
|
|
} |
|
|
|
|
|
console.log(`Retrying browser launch (${retry + 1}/5)...`); |
|
|
await new Promise((resolve) => setTimeout(resolve, 3000)); |
|
|
await createBrowser(retry + 1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
createBrowser(); |
|
|
|
|
|
|
|
|
module.exports = createBrowser; |
|
|
|
|
|
|
|
|
process.on('SIGINT', async () => { |
|
|
console.log('SIGINT signal received. Shutting down...'); |
|
|
global.finished = true; |
|
|
|
|
|
if (global.browser) { |
|
|
console.log('Closing browser...'); |
|
|
await global.browser.close().catch(e => console.error("Error closing browser:", e)); |
|
|
} |
|
|
process.exit(0); |
|
|
}); |
|
|
|
|
|
process.on('SIGTERM', async () => { |
|
|
console.log('SIGTERM signal received. Shutting down...'); |
|
|
global.finished = true; |
|
|
|
|
|
if (global.browser) { |
|
|
console.log('Closing browser...'); |
|
|
await global.browser.close().catch(e => console.error("Error closing browser:", e)); |
|
|
} |
|
|
process.exit(0); |
|
|
}); |