如何在无限滚动中从 Puppeteer 中释放内存?

恩科恩

我使用 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;
    }
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章