puppeteer:在继续下一行之前等待 N 秒
Posted
技术标签:
【中文标题】puppeteer:在继续下一行之前等待 N 秒【英文标题】:puppeteer: wait N seconds before continuing to the next line 【发布时间】: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 waiting和after waiting
你知道怎么做吗?
【问题讨论】:
await page.evaluate(async() => setTimeout(function() console.log('waiting'); , 4000););你的代码不对,上面是对的 【参考方案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);
【讨论】:
waitFor 已弃用并将被删除。新功能是waitForTimeout github.com/puppeteer/puppeteer/issues/6214【参考方案7】:您的语法不完整。 试试这个...
await page.evaluate(async() =>
setTimeout(function()
console.log('waiting');
, 4000)
);
【讨论】:
感谢您的帮助,我编辑了问题,对于小错误,我很抱歉,但我真的想问如何等待以上是关于puppeteer:在继续下一行之前等待 N 秒的主要内容,如果未能解决你的问题,请参考以下文章