Javascript Puppeter并行实例在一个浏览器而不是单独的浏览器中打开页面
我最初想为我拥有的每个独特的配置文件启动一个木偶演员实例。我设法解决了这个问题,但出现了一个新问题。基本上,在我的脚本的一个点上,我告诉浏览器关闭选项卡并重新打开一个新选项卡。它可以很好地关闭每个浏览器中的每个选项卡,但当我使用Javascript Puppeter并行实例在一个浏览器而不是单独的浏览器中打开页面,javascript,node.js,json,puppeteer,Javascript,Node.js,Json,Puppeteer,我最初想为我拥有的每个独特的配置文件启动一个木偶演员实例。我设法解决了这个问题,但出现了一个新问题。基本上,在我的脚本的一个点上,我告诉浏览器关闭选项卡并重新打开一个新选项卡。它可以很好地关闭每个浏览器中的每个选项卡,但当我使用wait browser.newPage()时它只将所有新选项卡发送到一个浏览器(我猜这是最后一个打开的浏览器),而不是停留在各自的浏览器中 const puppeteer = require('puppeteer-extra'); const fs = require(
wait 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"}
]
是否有解决方法?如何等待浏览器。关闭()代码>而不是底部的等待browser.newPage()代码>?这无法解决问题,因为在脚本中的某些情况下,我需要先关闭页面,然后重新打开新页面。我在想,如果我给每个人分配一个ID,他们就会知道如何留在各自的浏览器中?我的解决方法是让一个变量提到任务编号:“page=wait browser.newPage(taskNumber);”但这似乎并没有解决问题。每次浏览器关闭并重新打开一个新选项卡时,它只会被发送到最后一个运行的Puppeter实例,而不是停留在各自的浏览器中。