在 * puppeteer * 中,我希望在进入下一行代码之前等待一段定义的时间。
我试过在evaluate函数中放入一个setTimeout
,但它似乎被忽略了
console.log('before waiting');
await page.evaluate(async() => {
setTimeout(function(){
console.log('waiting');
}, 4000)
});
console.log('after waiting');
此代码不等待,只写 * before waiting * 和 * after waiting *
你知道怎么做吗?
8条答案
按热度按时间0qx6xfy61#
你可以使用一个承诺函数,
那你想推迟的时候就打电话。
如果你必须使用puppeteer,使用内置的waitForTimeout函数。
如果仍要使用page.evaluate,请在4秒钟后解析它。您没有解析任何内容。
但我想你可以简单地用前两个例子。
ryevplcw2#
我一直在使用:
这里3000是毫秒这似乎对我有用.
ws51t4hk3#
您可以使用以下选项之一来等待一秒钟:
或者,有许多Puppeteer函数包含内置的
delay
选项,这对于在某些事件之间等待可能会很方便:hgncfbus4#
page.waitFor现在已被弃用。
page.waitForTimeout现在建议暂停脚本执行给定的毫秒数,然后再继续:
brtdzjyr5#
其他答案已经说明了如何睡觉,但是现在
page.waitForTimeout
是finally deprecated,我想我应该添加我想添加一段时间的答案:不要睡觉!它会导致争用条件,破坏Puppeteer的事件驱动特性,引入不必要的脆弱性。几乎总是有更好的 predicate 可以等待:
waitForSelector
。waitForXPath
。waitForNavigation
。waitForNetworkIdle
或waitForResponse
。.on("dialog", ...
waitForFunction
。evaluate
块并添加您自己的代码,等待setInterval
或requestAnimationFrame
的DOM突变或轮询,并根据需要有效地重新实现waitForFunction
。waitForFunction
尤其未得到充分利用,但它增加了waitForTimeout
所没有的大量可靠性和精度。如果所有其他方法都失败了,你必须阻止脚本,你可以延迟,但我已经写了数百个 puppet 师脚本,从来没有使用过任何睡眠变体,所以我很确信这基本上是不必要的。
请参阅我关于Puppeteer Antipatterns的博客文章,以获得关于为什么应该避免以任何形式睡觉的更多分析,除非是绝对的最后手段。
对上述问题的一个警告是:休眠对于开发脚本时的临时调试非常有用。
rjzwgtxy6#
试试这个功能。
使用它
dly7yett7#
ghhaqwfi8#
您的语法不完整。
试试这个...