如何等待Puppeteer重新加载事件触发的页面?

时间:2019-03-10 04:59:04

标签: javascript node.js puppeteer google-chrome-headless

我正在尝试安全地处理页面的行为,该页面在select元素上使用浏览器内事件来触发页面重新加载(POST)。 URL相同,但是页面使用相同的HTML重新加载,唯一的区别是表中内容的排序顺序。我尝试了几种方法,但都不知如何可靠,如何实现这样的目标:

    try {
        await page.select('select[name=sort]', 'size'); 
        await page.waitForNextPageReload();
        await page.waitForSelector('select[name=sort]');
    } catch (error) {
        console.log('Error sorting page.');
    }

基本上,waitForNextPageReload不存在,但我正在寻找可以提供相似结果的东西。我尝试添加“延迟”,但我正在寻找更可靠的方法来正确管理错误。

2 个答案:

答案 0 :(得分:1)

尝试page.waitForNavigation

引用p操纵者文档:

  

此问题在页面导航到新URL或重新加载时解决。当您运行将间接导致页面导航的代码时,此功能很有用。

在间接加载页面的情况下,对您的用例来说似乎很有用

答案 1 :(得分:1)

选择和导航承诺之间可能存在竞争条件(请参见示例herehere)。您可以尝试这种方法吗?

public void someMethod() throws ExcpetionB {
    try {
        // some code that may throw ExceptionA
    }
    catch (ExceptionA excA) {
        throw new ExceptionB ("some message", excA);
    }
}