page.Evaluate等待Ajax完成加载



我正在nodejs中开发一个Puppeteer脚本。它在该脚本中有一个ajax到负载的更多按钮。问题是,脚本不等待Ajax完成加载,从而离开了页面。评估脚本而无需等待Ajax完成。我对新的诺言/等待有点困惑。有人可以帮我下面的脚本吗?

var result = await page.evaluate(({ stateSearched, areaSearched, pagePaginationNo }) => {
    function processThePage(){
        var itemResult = "testing"
        return {
            itemResult
        }
    }
    function loadMore(stateSearched,areaSearched,pagePaginationNo){
        $.ajax({
            url: "ajax.php",
            type: "GET"
        }).done(function (data) {
            if (nextPage == null) {
                lastResult = processThePage()
                return lastResult
            } else {
                loadMore(stateSearched,areaSearched,pagePaginationNo+1)
            }
        });
    }  
    loadMore(stateSearched,areaSearched,2)
})

您可以传递将Promise返回page.evaluate函数的函数,并在脚本完成后调用resolve

代码示例

var result = await page.evaluate(() => new Promise(resolve => {
    // do all kind of asynchronous actions
    resolve(123);
}));
console.log(result); // 123

传递给page.evaluate的功能返回承诺,该函数将在继续之前等待解决。因此,您可以将任何异步代码放在承诺中。代码完成后致电resolve。您传递给resolve函数的参数将返回您的脚本。

最新更新