PupTester/puppeteerTool.js

87 lines
2.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import puppeteer from 'puppeteer';
// Browser实例
let browserList = [];
// 不用的浏览器
let unusedBrowser = [];
// 创建浏览器实例
const createBrowser = async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
"--disable-gpu",
"--disable-dev-shm-usage",
"--disable-setuid-sandbox",
"--no-first-run",
"--no-sandbox",
"--no-zygote",
"--single-process",
],
});
// 记录该浏览器实例打开的页面数
let pageCount = 0;
// 监听到打开了一个新窗口
browser.on("targetcreated", () => {
pageCount++;
});
// 监听到窗口关闭
browser.on("targetdestroyed", () => {
pageCount--;
if (pageCount === 0 && unusedBrowser.includes(browser)) {
console.log("命中unusedBrowser");
delBrowser(browser);
}
});
browserList.push(browser);
};
// 从browserList和unusedBrowser中删除
const delBrowser = (browser) => {
browserList = browserList.filter((item) => item !== browser);
unusedBrowser = unusedBrowser.filter((item) => item !== browser);
browser.close().then(() => {
browser = null;
console.log("删除浏览器", browserList.length, unusedBrowser.length);
});
};
// 始终返回最后一个浏览器实例
const getBrowser = () => {
console.log(browserList)
return browserList[browserList.length - 1];
};
// 定时任务
const scheduledTask = () => {
createBrowser()
// 每隔20秒去创建一个新的Browser实例并销毁第一个实例
setInterval(() => {
createBrowser().then(() => {
// 把第一个浏览器置为不可用
const firstBrower = browserList[0];
firstBrower.pages().then((pages) => {
console.log(`第一个浏览器实例打开的页面数为${pages.length}`);
// 如果当前没有打开的页面创建Browser实例时会默认初始化一个页面所以这里判断的是<=1
if (pages.length <= 1) {
delBrowser(firstBrower);
} else {
unusedBrowser.push(browserList[0]);
}
});
});
}, 20 * 1000);
};
export {
scheduledTask,
getBrowser
}