Puppeteer - 仅使用 1 个浏览器实例

Puppeteer - Using only 1 browser instance

我是怎么做到的,所以在执行多个 puppeteer 任务时它只使用 1 个浏览器实例?即使在等待 browser.close() 之后,我正在抓取的网站仍在检测 创建 浏览器实例。所以如果我总是打开浏览器我就可以绕过它。

示例场景:


(async() => {
    const browser = await puppeteer.launch({headless: true}); //

    // Have this only run once ^^^^

    // Command gets run, it should not make a new browser and instead go
    // to make a new page    
    // VVVVVVVV

    const page = await browser.newPage();
    
    await page.goto(args[1]) // Go to the url the user specified

    // do some stuff

    await page.close();

   //repeat from browser.newPage();

})();

有什么想法吗?

您可以启动浏览器一次,然后使用 puppeteer.connect()

chrome.exe --remote-debugging-port=9222
(async() => {
    const browser = await puppeteer.connect({
      browserURL: 'http://localhost:9222',
      defaultViewport: null,
      headless: true,
    });

    const page = await browser.newPage();

    await page.goto(args[1]) // Go to the url the user specified

    // do some stuff

    await page.close();

    browser.disconnect();
})();

除了另一个答案提到的puppeteer.connect(),这里还有一个

一个非常简单的方法是只创建一次浏览器。仅在之前未初始化的情况下对其进行初始化。只要确保浏览器变量在您拥有的任何范围之外,如果它是一个快速应用程序,请确保它在路由之外。

let browser;

(async() => {
    if(!browser) browser = await puppeteer.launch({headless: true});

    const page = await browser.newPage();
    
    await page.goto(args[1]) // Go to the url the user specified

    // do some stuff

    await page.close();

})();