43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
const preparePage = async (chromium, { tabIndex = Number(process.env.TAB_INDEX), endpoint = process.env.CDP_ENDPOINT || 'http://127.0.0.1:9222' } = {}) => {
|
|
const browser = await chromium.connectOverCDP(endpoint);
|
|
const context = browser.contexts()[0];
|
|
|
|
if (!context) {
|
|
throw new Error('No browser context available');
|
|
}
|
|
|
|
await context.addInitScript(() => {
|
|
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
|
|
});
|
|
|
|
const idx = Number.isFinite(tabIndex) && tabIndex >= 0 ? Math.floor(tabIndex) : 0;
|
|
let pages = await context.pages();
|
|
|
|
while (pages.length <= idx) {
|
|
await context.newPage();
|
|
pages = await context.pages();
|
|
}
|
|
|
|
const page = pages[idx];
|
|
await page.bringToFront();
|
|
|
|
return { browser, context, page };
|
|
};
|
|
|
|
const safeDisconnectBrowser = async (browser) => {
|
|
if (!browser) return;
|
|
|
|
try {
|
|
if (typeof browser.disconnect === 'function') {
|
|
await browser.disconnect();
|
|
} else {
|
|
await browser.close();
|
|
}
|
|
} catch {}
|
|
};
|
|
|
|
module.exports = {
|
|
preparePage,
|
|
safeDisconnectBrowser,
|
|
};
|