单击“_blank”后使用 Puppeteer 获取新页面的句柄?

Using Puppeteer to get a handle to the new page after "_blank" click?

看看这个简单的代码:

const browser = await puppeteer.launch({headless: false});
const page: Page = await browser.newPage();
await page.evaluate((a) =>
                        {

                             //This will  open a new page :  
                            ([...document.querySelectorAll("a")][0] as HTMLElement).click();
                        });

如果点击的 A(anchor) 元素有 target="_blank" ,则该页面将作为新页面打开。

这不是原始页面对象。

问题:

如何在用户点击 <a target="_blank" 后获取新的页面对象?

可以这样做:

const [newTarget] = await Promise.all([
  // Await new target to be created with the proper opener
  new Promise(x => browser.on('targetcreated', target => {
    if (target.opener() !== page.target())
      return;
    browser.removeListener('targetcreated', arguments.callee);
    x();
  })),
  page.click('link'),
])
// Attach to the newly opened page.
const newPage = await newTarget.page();