我需要访问一些独立的URL,其中页面的元素加载非常缓慢。通常需要几分钟才能完全加载整个页面。但是,此页面只有一小部分有用。有用的部分可以由页面上的某个选择器指示。因此,我想知道是否可以告诉puppeteer一旦键选择器已经出现就停止等待页面,以加快的速度。有广泛的答案告诉我们使用
await page.waitForSelector('.class_sample');
所以我这样使用它:
page = await browser.newgpae();
await page.goto('example.com/xxx.html');
await page.waitForSelector('.class_sample');`
但是,它仍然停留在page.goto()
的舞台上。有时pyppeteer会在30秒后报告超时错误,因为目标网页太慢。
我发现关于方法waitForSelector()
的大多数示例都放在.click()
方法的后面。我最麻烦的情况是,这些页面彼此独立(example.com/xxxxx.html),并且不能通过单击链接来访问,因此waitForSelector()
方法还不能解决我的问题。>
任何建议将不胜感激。
答案 0 :(得分:0)
我建议将page.goto与domcontentloaded
选项一起使用。为什么?因为默认选项是load
,它会为您所说的那些元素等待更长的时间,而当DOMContentLoaded事件触发时,选择器很可能已经可用。
我建议也保留waitForSelector
,这将使您的脚本更加可靠。
await page.goto('example.com', { waitUntil: 'domcontentloaded' });
await page.waitForSelector('.class_sample');
DOMContentLoaded
当初始HTML文档已完全加载和解析而没有等待样式表,图像和子帧完成加载时,将触发DOMContentLoaded事件。 [source]
load
加载整个页面(包括样式表和图像等所有相关资源)后,将触发load事件。这与DOMContentLoaded相反,后者在页面DOM被加载后立即触发,而无需等待资源完成加载。 [source]