0

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

任何建议将不胜感激。

4

1 回答 1

0

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

我建议也离开waitForSelector,它会使你的脚本更可靠。

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

DOMContentLoaded

DOMContentLoaded 事件在初始 HTML 文档完全加载和解析后触发,无需等待样式表、图像和子框架完成加载。[资源]

load

加载整个页面时会触发 load 事件,包括所有相关资源,例如样式表和图像。这与 DOMContentLoaded 不同,后者在页面 DOM 加载后立即触发,无需等待资源完成加载。[资源]

于 2020-06-16T17:29:18.540 回答