在 puppeteer 中等待 page.waitFor 里面的 page.evaluate?

Joh*_*ith 2 javascript time node.js puppeteer

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

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

如果这是不可能的,人们将如何引入这样的时间延迟?

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

 function delay(time) {
     let curtime = new Date().getTime();
     time += curtime;
     while(curtime < time) {
         curtime = new Date().getTime();
     } 
 }
Run Code Online (Sandbox Code Playgroud)

CPU 对此很重要,我不想让一些 while 循环执行数千次以进行简单的延迟

mbi*_*bit 6

  1. await只能在async函数中使用。
  2. 函数 inevaluate将在页面上下文中进行评估,因此:

使用setTimeout()

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

或写你的异步延时功能类似page.waitFor木偶戏

function waitFor(delay) {
    return new Promise(resolve => setTimeout(resolve, delay));
}
Run Code Online (Sandbox Code Playgroud)

那么你将拥有:

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