Javascript 木偶师:检测和访问循环中打开的弹出窗口的正确方法

Javascript 木偶师:检测和访问循环中打开的弹出窗口的正确方法,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我正在尝试打开多个弹出窗口并访问其中的每一个 下面是我正在使用的代码的相关部分 const newPagePromise = new Promise(res => browser.on('targetcreated', target => res(target.page()))); for(const dataWorkSheet of dataWorkSheetsArray) { await page.evaluate(async () => {

我正在尝试打开多个弹出窗口并访问其中的每一个

下面是我正在使用的代码的相关部分

    const newPagePromise = new Promise(res => browser.on('targetcreated', target => res(target.page())));
    for(const dataWorkSheet of dataWorkSheetsArray) {
        await page.evaluate(async () => {
          await $('#myDataExport').click();
          await $('.export a').click();
        });
        await page.waitFor(3000);
        const exportPopup = await newPagePromise;
    }
newPagePromise
是否应在的
之外?它是否适用于我打开的所有弹出窗口

任何澄清这一点的帮助都会非常有用


谢谢。

我会数一数您需要的弹出窗口,然后等待:

//跟踪目标
让目标=[];
//我们创建一个带有回调的承诺来解决promis
让我们下决心;
const popupromise=新承诺(x=>resolve=x);
browser.on('targetcreated',target=>{
//收集弹出窗口
targets.push(target.page());
//如果我们得到了所有的弹出窗口,我们就能解决这个问题
if(targets.length==数据工作表阵列)
解决();
});
用于(数据工作表阵列的常数数据工作表){
等待页面。评估(异步()=>{
等待$('#myDataExport')。单击();
等待$('.export a')。单击();
});
等待页面。等待(3000);
}
//等待承诺得到解决
等待时机;
//对弹出窗口做些什么
控制台日志(目标);

如前所述,
newPagePromise
只需一次解析,无论有多少次循环迭代。每次您想等待承诺时,都需要创建它。@tehhowch,如果我将
newPagePromise
放入,代码将挂起,不再继续