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

标签 memory 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;
    }
  }

关于memory - 如何在无限滚动中从 Puppeteer 中释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67092590/

相关文章:

linux - memcachedslab和linux内核slab之间有什么关系

ios - 如何在 iOS 中查找文本段范围

memory - 编程时保留 STM32F4 内存

javascript - 基于属性错误的 Puppeteer 选择器

javascript - 如何使用 Puppeteer 和 Chrome DevTools 协议(protocol)修改请求 header ? (可能是JS语法问题)

javascript - Puppeteer 从 page.$$ 选择器迭代 elementHandles

c - 如何使内存总线饱和

c++ - 如何(故意)使用 new 在 C++ 中导致程序崩溃

node.js - 如何在 Puppeteer 中单击弹出/新选项卡窗口中的元素

node.js - 如何在 Node.js Puppeteer Headless=false Chromium 浏览器中清除历史记录(清除浏览数据)