【问题标题】:In puppeteer how to wait for pop up page to finish loading?在 puppeteer 中如何等待弹出页面完成加载?
【发布时间】:2018-10-11 15:49:25
【问题描述】:

在以下示例中,如何等待弹出窗口完成加载? 单击谷歌图标后,当我尝试交互时,您会弹出一个登录 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


    【解决方案1】:

    您可以等待创建新目标。

    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()));
    

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

    【讨论】:

      【解决方案2】:
      const [newPage] = await Promise.all([
        new Promise((resolve) => page.once('popup', resolve)),
        page.click('something.that-will-open-the-popup')
      ]);
      
      await newPage.waitForSelector('.page-is-loaded')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 2023-03-15
        • 2023-03-14
        • 1970-01-01
        • 2022-07-27
        • 2021-11-07
        • 2019-03-01
        相关资源
        最近更新 更多