我很难弄清楚如何安排Puppeteer的异步功能,如下图所示:
await page.type("field", "somedata");
// calculate specific timestamp
setTimeout(() => { await page.click("#submit") }, delay);
我需要在“ paralell”中准备多种表格,因为在特定的时间戳记过去之前我无法停止,目的是准备这些表格,然后在特定的时间戳记下提交它们。计算相似时间戳的两种表单必须在10ms内提交。
我希望在没有在主函数中创建自己的事件循环的情况下实现此目标。另外,如果在这样的循环中我正在等待其他pupeteer函数,我肯定会错过确切的时间戳。我不走运吗?
答案 0 :(得分:2)
如果您将函数标记为异步,则您的代码应该可以工作:
setTimeout(async () => { await page.click("#submit") }, delay);
但是您的代码存在问题,即setTimeout不是Promise,因此在执行超时之前会触发await page.close()
之类的操作(我想接下来会发生)。
最好这样做:
await page.type("field", "somedata");
await new Promise(resolve => setTimeout(resolve, delay)); // waits delay milliseconds until the promise is resolved
await page.click("#submit");
答案 1 :(得分:1)
您还可以使用伪娘自己的约定计时器,而无需等待延迟,然后单击:
await page.type("field", "somedata");
page.waitFor(delay).then(() => { page.click("#submit"); });