木偶:一旦出现特殊元素,就不再等待慢速页面

时间:2020-06-16 17:00:30

标签: javascript puppeteer pyppeteer

我需要访问一些独立的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()方法还不能解决我的问题。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议将page.gotodomcontentloaded选项一起使用。为什么?因为默认选项是load,它会为您所说的那些元素等待更长的时间,而当DOMContentLoaded事件触发时,选择器很可能已经可用。

我建议也保留waitForSelector,这将使您的脚本更加可靠。

await page.goto('example.com', { waitUntil: 'domcontentloaded' });
await page.waitForSelector('.class_sample');

DOMContentLoaded

当初始HTML文档已完全加载和解析而没有等待样式表,图像和子帧完成加载时,将触发DOMContentLoaded事件。 [source]

load

加载整个页面(包括样式表和图像等所有相关资源)后,将触发load事件。这与DOMContentLoaded相反,后者在页面DOM被加载后立即触发,而无需等待资源完成加载。 [source]