javascript - 如何使用 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 保存在缓存中吗?
解决方案
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实现自己的缓存策略。
但是这一步有一些陷阱(确切地说是缓存和使缓存无效)所以要注意。