【问题标题】:puppeteer: wait N seconds before continuing to the next linepuppeteer:在继续下一行之前等待 N 秒
【发布时间】:2018-04-05 18:02:54
【问题描述】:

puppeteer中,我想等待一段定义的时间,然后再转到下一行代码。

我尝试将 setTimeout 放在评估函数中,但它似乎被简单地忽略了

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

这段代码不用等待,只写before waitingafter waiting

你知道怎么做吗?

【问题讨论】:

  • await page.evaluate(async() => { setTimeout(function(){ console.log('waiting'); }, 4000);});你的代码不对,上面是对的

标签: javascript node.js chromium puppeteer browser-testing


【解决方案1】:

我一直在使用:

await page.waitForTimeout(3000);

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

【讨论】:

  • waitfor() 已被弃用。改用 page.waitForTimeout(1000)
【解决方案2】:

你可以使用一点promise函数,

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)
    });
});

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

【讨论】:

  • 你确定这有效吗?你不能在 page.evaluate() 中使用 delay() 它不属于它的上下文。
  • 我很确定延迟函数和 page.evaluate 是不同的例子。
  • waitFor 已弃用,请改用waitForTimeout
【解决方案3】:

page.waitFor 现已弃用。

现在建议page.waitForTimeout 在继续之前将脚本执行暂停给定的毫秒数:

await page.waitForTimeout(1000)

【讨论】:

    【解决方案4】:

    试试这个功能。

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    

    使用它

      async function demo() {
        console.log('Waiting...');
        await sleep(3000);
        console.log('ok');
      }
    
      demo();
    

    【讨论】:

      【解决方案5】:
      await new Promise(_func=> setTimeout(_func, 5000));
      

      【讨论】:

        【解决方案6】:

        您可以使用以下选项之一等待一秒钟

        await page.waitFor(1000);
        await frame.waitFor(1000);
        await new Promise(r => setTimeout(r, 1000));
        

        另外,有许多 Puppeteer 函数包含一个内置的 delay 选项,这可能会在某些事件之间等待时派上用场:

        // Click Delay
        // Time to wait between mousedown and mouseup in milliseconds. Defaults to 0.
        
        await page.click('#example', {delay: 1000});
        await frame.click('#example', {delay: 1000});
        await elementHandle.click({delay: 1000});
        await page.mouse.click(0, 0, {delay: 1000});
        
        // Type Delay
        // Time to wait between key presses in milliseconds. Defaults to 0.
        
        await page.type('#example', 'Hello, world!', {delay: 1000});
        await frame.type('#example', 'Hello, world!', {delay: 1000});
        await elementHandle.type('Hello, world!', {delay: 1000});
        await page.keyboard.type('Hello, world!', {delay: 1000});
        
        // Press Delay
        // Time to wait between keydown and keyup in milliseconds. Defaults to 0.
        
        await elementHandle.press('Backspace', {delay: 1000});
        await page.keyboard.press('Backspace', {delay: 1000});
        

        【讨论】:

        【解决方案7】:

        您的语法不完整。
        试试这个...

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

        【讨论】:

        • 感谢您的帮助,我编辑了问题,对于小错误,我很抱歉,但我真的想问如何等待
        猜你喜欢
        • 2020-04-08
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多