我正在尝试使用puppeteer进行网页抓取。我最近需要处理的元素。当我单击搜索按钮时,结果将加载到AJAX中,我需要选择我要选择的元素在搜索结果中,而不是页面的初始加载中。它生成的页面屏幕截图也包含搜索结果,如果它输出HTML源代码,我也可以在其中看到该元素。但不确定为什么我不能选择它。
答案 0 :(得分:3)
您可以使用await page.waitForSelector(cssSelector);
来请求Puppeteer等待UI中显示任何元素,然后继续执行脚本中的进一步步骤。默认情况下,等待超时为30秒,但您可以将其设置为所需的任何超时。
所以在您的情况下,我会:
await page.waitForSelector(cssSelector);
来请求Puppeteer等待,直到确定可以执行某些操作的元素会在用户界面中显示。
如果不使用该waitForSelector()
调用,可能会发现会发生,即显示元素,但是Puppeteer将超时,例如,如果您希望在元件。这是因为click
事件(以及与元素交互的其他Puppeteer事件)的超时非常短,有时脚本(尤其是无头模式)可能太快地移至下一条指令,从而无法更新UI足够快地跟上。
因此,通过添加其他click
调用,还可以使脚本更加健壮。尤其是当数据按您的情况动态生成时。