await page.waitFor内部页面。在操纵up中进行评估?

时间:2019-12-14 04:37:14

标签: javascript node.js time puppeteer

我想知道你是否可以做类似的事情

 page.evaluate((page) => {
     //Code to execute before
     await page.waitFor(1000);
     //Code to execute after the 1000ms time delay
 }, page);

如果这不可能,那么如何引入这样的时间延迟?

哦,最后一点,做这样的事情对于我的项目中的时间延迟不是一个可行的选择:

 function delay(time) {
     let curtime = new Date().getTime();
     time += curtime;
     while(curtime < time) {
         curtime = new Date().getTime();
     } 
 }

CPU对此很重要,我不想有一些while循环执行数千次,只是为了简单的延迟

1 个答案:

答案 0 :(得分:3)

  1. await仅可用于async函数。
  2. evaluate中的函数将在页面上下文中求值,所以可以:

使用setTimeout()

page.evaluate(() => {
     //Code to execute before
     setTimeout(function() {
       //Code to execute after the 1000ms time delay
     }, 1000);    
 });

或者在puppeteer中编写类似于page.waitFor的异步延迟函数。

function waitFor(delay) {
    return new Promise(resolve => setTimeout(resolve, delay));
}

那么您将拥有:

page.evaluate(async() => {
     //Define your waitFor function
     //Code to execute before
     await waitFor(1000);
     //Code to execute after the 1000ms time delay
 });