puppeteer: wait N seconds before continuing to the next line
In puppeteer I would like to wait a defined time before going to the next line of code.
I've tried to put a setTimeout
in an evaluate function but it seems to be simply ignored
console.log('before waiting');
await page.evaluate(async() => {
setTimeout(function(){
console.log('waiting');
}, 4000)
});
console.log('after waiting');
This code don't wait and just write before waiting and after waiting
Do you know how to do this?
Solution 1:
You can use a little promise function,
function delay(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time)
});
}
Then, call it whenever you want a delay.
console.log('before waiting');
await delay(4000);
console.log('after waiting');
If you must use puppeteer use the builtin waitForTimeout function.
await page.waitForTimeout(4000)
If you still want to use page.evaluate, resolve it after 4 seconds. You are not resolving anything.
await page.evaluate(async() => {
await new Promise(function(resolve) {
setTimeout(resolve, 1000)
});
});
But I guess you can simply use the first two examples.
Solution 2:
I've been using:
await page.waitForTimeout(3000);
Where 3000 is Milliseconds And that seems to be working for me.