【发布时间】:2022-01-07 03:13:01
【问题描述】:
我正在尝试使用 puppeteer 延迟此评估,但我尝试了所有方法但没有成功,例如:
await page.waitForTimeout(1000);
或与:
setTimeout(() => { }, 1000);
await page.evaluate(() => {
let elements = document.getElementsByClassName('button-text');
for (let element of elements) if (element.innerText == 'Add') element.click();
})
我希望它像这个示例一样在每次点击后都出现,但它永远不会起作用:
await page.evaluate(() => {
let elements = document.getElementsByClassName('button-text');
for (let element of elements)
if (element.innerText == 'Add'){
await page.waitForTimeout(1000);
element.click();
}
})
【问题讨论】:
-
page.evaluate中的所有内容都在无法访问page的浏览器进程中进行序列化和执行。您必须在浏览器中使用通用睡眠,例如await new Promise(r => setTimeout(r, 1000))。但是,您真正想要完成什么?如果您不介意分享您正在抓取的网站和您想要提取的数据,我可以写一个更完整的答案。原因是睡眠或等待超时对于您尝试解决的任何问题几乎总是一个糟糕的解决方案,因为它会导致竞争条件。谢谢。
标签: javascript web-scraping automation puppeteer delay