【发布时间】:2020-06-16 17:00:30
【问题描述】:
我需要访问一些独立的 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会在30s后报超时错误,因为目标页面太慢了。
我发现大多数关于waitForSelector() 方法的示例都放在.click() 方法后面。我的麻烦情况是页面相互独立(example.com/xxxxx.html),不能通过点击链接访问,所以waitForSelector()方法还没有解决我的问题。
任何建议将不胜感激。
【问题讨论】:
-
您的第一行中有一些拼写错误和缺少
await:browser.newgpae();应该是await browser.newPage();。是您提问的错误,还是您的真实脚本中也存在这些错误? -
对不起。在我的问题中,这只是一个粗心的打字错误。我修改了我的问题,试图让它更容易理解。期待您的进一步帮助,并在此先感谢您。
-
我明白了。如果它有助于使脚本更稳定,请参阅我的解决方案
{ waitUntil: 'domcontentloaded' }。 -
其实我的要求是在puppeteer发现出现特殊元素的情况下提前停止导航来加速导航。 'domcontentloaded' 事件将使 chrome 等到整个页面加载完毕,包括一些缓慢的 javascript。那么是否可以在 goto() 方法中使用 waitForSelector 事件?
-
不,
waitForSelector不是page.goto 中的选项。你用过page.setRequestInterception吗?也许您可以通过跳过某些请求类型来加快加载速度。
标签: javascript puppeteer pyppeteer