木偶师:等待 N 秒,然后再继续下一行

puppeteer 中,我想在进入下一行代码之前等待一个确定的时间。

我试图在评估函数中放入一个,但它似乎被简单地忽略了setTimeout

console.log('before waiting');
await page.evaluate(async() => {
  setTimeout(function(){
      console.log('waiting');
  }, 4000)
});
console.log('after waiting');

此代码无需等待,只需在等待之前等待后编写即可

你知道怎么做吗?


答案 1

你可以使用一个小承诺函数,

function delay(time) {
   return new Promise(function(resolve) { 
       setTimeout(resolve, time)
   });
}

然后,每当需要延迟时调用它。

console.log('before waiting');
await delay(4000);
console.log('after waiting');

如果您必须使用 puppeteer,请使用内置的 waitForTimeout 函数。

await page.waitForTimeout(4000)

如果仍要使用 page.evaluate,请在 4 秒后解决。你没有解决任何事情。

await page.evaluate(async() => {
    await new Promise(function(resolve) { 
           setTimeout(resolve, 1000)
    });
});

但我想你可以简单地使用前两个例子。


答案 2

我一直在使用:

await page.waitForTimeout(3000);

其中3000是毫秒,这似乎对我有用。