Puppeteer:如何识别 SPA 已到达底部,无法再向下滚动?
Puppeteer: How to recognize, that a SPA has reached its bottom, and no more scrolling-down is possible?
我正在为 Nodejs 中的 Puppeteer 构建 abstraction/simplification,以抓取单页应用程序。它将执行的基本操作之一是多次向下滚动页面,以触发 AJAX 调用。我所做的基本上是:
(()=>{
page.on('response', async res => {
if (res.includes('/someAjaxAction')) {
numResponses++
}
})
while(numResponses<20){
await scrollDown();//Calling my function that scrolls down.
await Promise.delay(400)//Creating a delay just in case...
}
})()
我设置了 onResponse 事件侦听器,并计算执行适当 ajax 调用的次数。我无限向下滚动,直到满足这个条件,就是这样 - 我可以使用完整的 HTML.
问题是,这会迫使客户端编码器提供他们预期的 ajax 调用次数。我想要的是在无法再滚动时以某种方式识别一种情况。喜欢:我们已经到了页面的末尾。
知道如何抽象出这种情况吗?
没有万无一失的办法,不过我是按照这个顺序处理无穷大的,
- 从目标收集数据
- 删除目标元素
- 滚动特定时间
- 等待新的目标元素出现
- ...循环直到没有剩余内容
知道它完成的最简单方法是巧妙地将 try...catch
用于 page.waitFor
函数。
我正在为 Nodejs 中的 Puppeteer 构建 abstraction/simplification,以抓取单页应用程序。它将执行的基本操作之一是多次向下滚动页面,以触发 AJAX 调用。我所做的基本上是:
(()=>{
page.on('response', async res => {
if (res.includes('/someAjaxAction')) {
numResponses++
}
})
while(numResponses<20){
await scrollDown();//Calling my function that scrolls down.
await Promise.delay(400)//Creating a delay just in case...
}
})()
我设置了 onResponse 事件侦听器,并计算执行适当 ajax 调用的次数。我无限向下滚动,直到满足这个条件,就是这样 - 我可以使用完整的 HTML.
问题是,这会迫使客户端编码器提供他们预期的 ajax 调用次数。我想要的是在无法再滚动时以某种方式识别一种情况。喜欢:我们已经到了页面的末尾。
知道如何抽象出这种情况吗?
没有万无一失的办法,不过我是按照这个顺序处理无穷大的,
- 从目标收集数据
- 删除目标元素
- 滚动特定时间
- 等待新的目标元素出现
- ...循环直到没有剩余内容
知道它完成的最简单方法是巧妙地将 try...catch
用于 page.waitFor
函数。