人偶在指定时间安排动作

时间:2019-03-02 17:46:45

标签: javascript node.js puppeteer

我很难弄清楚如何安排Puppeteer的异步功能,如下图所示:

await page.type("field", "somedata");
// calculate specific timestamp
setTimeout(() => { await page.click("#submit") }, delay);

我需要在“ paralell”中准备多种表格,因为在特定的时间戳记过去之前我无法停止,目的是准备这些表格,然后在特定的时间戳记下提交它们。计算相似时间戳的两种表单必须在10ms内提交。

我希望在没有在主函数中创建自己的事件循环的情况下实现此目标。另外,如果在这样的循环中我正在等待其他pupeteer函数,我肯定会错过确切的时间戳。我不走运吗?

2 个答案:

答案 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"); });