首页 > 解决方案 > 在 puppeteer 中如何等待弹出页面完成加载?

问题描述

在以下示例中,如何等待弹出窗口完成加载?单击google图标后,您会弹出一个登录gmail的窗口,当我尝试与第二页交互时,它是未定义的(因为我不知道如何等待它完全加载。有什么建议吗?

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({headless: false});
    page = await browser.newPage();
    await page.goto("https://www.example.com/signin");
    await page.waitForSelector(".Icon-google");
    await page.click(".Icon-google");
    const pages = await browser.pages();
    console.log(pages[2].url());
})();

标签: puppeteer

解决方案


您可以等待创建新目标。

const browser = await puppeteer.launch({headless: false});
page = await browser.newPage();
await page.goto("https://app.testim.io/#/signin");
await page.waitForSelector(".Icon-google");
const nav = new Promise(res => browser.on('targetcreated', res))
await page.click(".Icon-google");
await nav
const pages = await browser.pages();
console.log(pages.length);//number of pages increases !
console.log(pages.map(page => page.url()));

PS首先我尝试page.waitForNavigation()了但它没有用,可能是因为它是一个弹出窗口。


推荐阅读