首页 > 解决方案 > Puppeteer 并行实例在一个浏览器而不是单独的浏览器中打开页面

问题描述

我最初想为我拥有的每个唯一配置文件启动一个 Puppeteer 实例。我设法解决了这个问题,但出现了一个新问题。基本上,在我的脚本的一个点中,我告诉浏览器关闭选项卡并重新打开一个新选项卡。它可以很好地关闭每个浏览器中的每个选项卡,但是当我使用await browser.newPage();它时,它会将所有新选项卡发送到一个浏览器(我猜这是最后一个打开的浏览器),而不是留在各自的浏览器中。

const puppeteer = require('puppeteer-extra');
const fs = require('fs');

const botRun = async emailInfo => {
    browser = await puppeteer.launch({
        args: [],
        headless: false,
        ignoreHTTPSErrors: true,
        slowMo: 5,
    });
    const page = await browser.newPage();
    await page.waitForTimeout(2500)
    // do stuff with emailInfo
    await page.close(); // works fine - will close tab for each browser 
    await browser.newPage(); // suddenly sends all tabs to 1 browser
};

(async () => {
    const profile = JSON.parse(fs.readFileSync("./settings.json"));    
    await Promise.all(profile.map(({email}) => botRun(email)));
})();

settings.json好像:

[
  {"email": "email1@gmail.com"},
  {"email": "email2@gmail.com"},
  {"email": "email3@gmail.com"}
]

在此处输入图像描述

有什么解决方法吗?

标签: javascriptnode.jsjsonpuppeteer

解决方案


推荐阅读