使用browser.on('disconnected')。
您可以使用browser.on('disconnected') 来监听浏览器何时关闭或崩溃,或者是否调用了browser.disconnect() 方法。
然后,您可以自动重新启动浏览器,并继续执行您的程序。
以下类将启动浏览器,并在触发'disconnected' 事件时自动重新启动浏览器:
class BrowserHandler {
constructor() {
const launch_browser = async () => {
this.browser = false;
this.browser = await puppeteer.launch();
this.browser.on('disconnected', launch_browser);
};
(async () => {
await launch_browser();
})();
}
}
BrowserHandler.browser 将在断开连接时返回false。
此外,以下功能将使您能够强制您的程序等待浏览器完成启动,然后再继续:
const wait_for_browser = browser_handler => new Promise((resolve, reject) => {
const browser_check = setInterval(() => {
if (browser_handler.browser !== false) {
clearInterval(browser_check);
resolve(true);
}
}, 100);
});
完整示例:
'use strict';
const puppeteer = require('puppeteer');
/**
* Class: BrowserHandler
* Relaunch Browser when Closed
* Return false when Browser is Disconnected
*/
class BrowserHandler {
constructor() {
const launch_browser = async () => {
this.browser = false;
this.browser = await puppeteer.launch();
this.browser.on('disconnected', launch_browser);
};
(async () => {
await launch_browser();
})();
}
}
/**
* Function: wait_for_browser
* Wait for Browser to Finish Launching
*/
const wait_for_browser = browser_handler => new Promise((resolve, reject) => {
const browser_check = setInterval(() => {
if (browser_handler.browser !== false) {
clearInterval(browser_check);
resolve(true);
}
}, 100 );
});
// Main Program
(async () => {
// Open Browser
const browser_handler = new BrowserHandler;
await wait_for_browser(browser_handler);
// Open New Page
let page = await browser_handler.browser.newPage();
await page.goto('https://www.example.com/');
// Disconnect and Automatically Reconnect Browser
browser_handler.browser.disconnect();
if (browser_handler.browser === false) {
console.log('The browser has been disconnected.');
await wait_for_browser(browser_handler);
}
console.log('The browser has been reconnected.');
// Close and Automatically Reopen Browser
await browser_handler.browser.close();
if (browser_handler.browser === false) {
console.log('The browser has been closed.');
await wait_for_browser(browser_handler);
}
console.log('The browser has been reopened.');
// Force Close Puppeteer
process.exit();
})();
结果:
浏览器已断开连接。
浏览器已重新连接。
浏览器已关闭。
浏览器已重新打开。