首页 > 解决方案 > 如何使用 puppeteer 缓存文件

问题描述

我想知道如何使用 puppeteer 缓存文件,所以我不必在脚本启动时再次加载它,假设我有这个脚本:

async function run () {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();
 await page.goto("https://www.amazon.com/");
 browser.close();
}
run();

好吧,如果我想保存 html 以便不必再次加载它,我该怎么做?我研究并发现如何在 puppeteer 中禁用缓存?但是我在答案和问题中都没有找到很多细节,有人可以向我解释如何将 html 保存在缓存中吗?

标签: javascriptnode.jspuppeteer

解决方案


Puppeteer 在后台使用 Chrome(或 FireFox)浏览器,以防万一:

  • 这不是第一次访问(缓存已满)
  • 资源具有适当的缓存标头且未过期(缓存控制等)
  • 您没有使用手动禁用缓存
await page.setCacheEnabled(false);
await pageSession.send('Network.setCacheDisabled', { cacheDisabled: true });

资源将已被缓存,您无需手动执行任何操作。

但是,如果您想在缓存页面上进行测试,您需要在测试之前对其进行预热,就像在示例中一样:

async function warmingBrowser(url: URL, pageInstance: Page) {
    await pageInstance.goto(url.href, { waitUntil: 'networkidle0' });
    await pageInstance.close();
}

代码取自perfrunner

如果您想让它完全脱机工作 - Puppeteer 对此无济于事,您需要使用ServiceWorker实现自己的缓存策略。

但是这一步有一些陷阱(确切地说是缓存和使缓存无效)所以要注意。


推荐阅读