feat: 打开渠道与脚本自动化分离
This commit is contained in:
39
src/main/scripts/common/tabs.js
Normal file
39
src/main/scripts/common/tabs.js
Normal file
@@ -0,0 +1,39 @@
|
||||
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,
|
||||
};
|
||||
Reference in New Issue
Block a user