如何在无限滚动中释放 Puppeteer 的内存?
How to free up memory from Puppeteer in infinite scroll?
我使用 Puppeteer 浏览了一个无限滚动页面,但是这个页面真的很长。问题是 Puppeteer 使用的内存增长太多,过了一会儿,它崩溃了。我想知道是否有一种好方法可以在滚动过程中以某种方式释放内存。
比如,是否可以每隔一分钟暂停一次,将目前已经加载的HTML取出,复制到硬盘中?这样,在我完成滚动后,我将所有 HTML 都放在一个文件中并且可以轻松地使用它。有可能这样做吗?如果是,如何?如果不是,什么是可行的解决方案?
我敢打赌您概述的方法会奏效。诀窍是仅从要添加到的列表中删除节点。实现可能看起来像这样:
await page.addScriptTag({ url: "https://code.jquery.com/jquery-3.2.1.min.js" });
const scrapedData = [];
while (true) {
const newData = await page.evaluate(async () => {
const listElm = $(".some-list");
const tempData = listElm.toArray().map(elm => {
//Get data...
});
listElm
.children()
.slice(20)
.remove();
//TODO: Scroll and wait for new content...
return tempData;
});
scrapedData.push(...newData)
if(someCondition){
break;
}
}
我使用 Puppeteer 浏览了一个无限滚动页面,但是这个页面真的很长。问题是 Puppeteer 使用的内存增长太多,过了一会儿,它崩溃了。我想知道是否有一种好方法可以在滚动过程中以某种方式释放内存。
比如,是否可以每隔一分钟暂停一次,将目前已经加载的HTML取出,复制到硬盘中?这样,在我完成滚动后,我将所有 HTML 都放在一个文件中并且可以轻松地使用它。有可能这样做吗?如果是,如何?如果不是,什么是可行的解决方案?
我敢打赌您概述的方法会奏效。诀窍是仅从要添加到的列表中删除节点。实现可能看起来像这样:
await page.addScriptTag({ url: "https://code.jquery.com/jquery-3.2.1.min.js" });
const scrapedData = [];
while (true) {
const newData = await page.evaluate(async () => {
const listElm = $(".some-list");
const tempData = listElm.toArray().map(elm => {
//Get data...
});
listElm
.children()
.slice(20)
.remove();
//TODO: Scroll and wait for new content...
return tempData;
});
scrapedData.push(...newData)
if(someCondition){
break;
}
}