如何在无限滚动中释放 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;
    }
  }