在 puppeteer 中如何等待弹出页面完成加载?
Posted
技术标签:
【中文标题】在 puppeteer 中如何等待弹出页面完成加载?【英文标题】:In puppeteer how to wait for pop up page to finish loading? 【发布时间】: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());
)();
【问题讨论】:
【参考方案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')
【讨论】:
以上是关于在 puppeteer 中如何等待弹出页面完成加载?的主要内容,如果未能解决你的问题,请参考以下文章
Puppeteer 等待页面和 setTimeout 在 Firebase 云功能中不起作用
Java Selenium 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素