javascript - 如何使用 puppeteer 缓存文件

标签 javascript node.js 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 以便不必再次加载它,我该怎么做?我研究发现How can I disable cache in puppeteer?但是我在答案和问题中都没有找到很多细节,有人可以向我解释如何将 html 保存在缓存中吗?

最佳答案

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 实现你自己的缓存策略。 .
    但是这一步有一些陷阱(确切地说是缓存和使缓存无效)所以要注意。

    关于javascript - 如何使用 puppeteer 缓存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67857426/

    相关文章:

    javascript - 从任何给定字符串中删除任何给定字符

    javascript - 如何在 Astro 中切换组件的显示状态

    javascript - 如何使用 Facebook api 在 Facebook 上分享文章并在帖子中显示文章缩略图?

    javascript - 为什么 Puppeteer 没有下载到 Windows 中 "Page.setDownloadBehavior"指定的文件夹中?

    javascript - 音频播放器 - 一次仅播放一首轨道,不起作用

    javascript - AngularJs 添加 ... 并将所有标签关闭到摘录

    javascript - Node.js 替代 PHP 的 exec

    javascript - Node.js - promise 和条件语句(if、switch 等) - 如何构建?

    javascript - 如何使用 puppeteer 生成可编辑的 PDF

    javascript - 一种防止在 puppeteer 实例中打开开发工具的方法