如何在Puppeteer中禁用缓存?

16

我想在 Puppeteer 中禁用缓存,请问有人可以告诉我如何操作吗?我找到了 page.setCacheEnabled(enabled),但是不太明白如何使用。

我知道浏览器默认是没有启用缓存或 cookie 的,但在我的情况下,浏览器总是在后台运行,所以需要另一种解决方案。

4个回答

29
根据 Puppeteer 文档,您可以使用 await page.setCacheEnabled(enabled)。这是在去年十二月份添加的。参见 Git Hub issue #1609。如果您查看 提交记录变更,您会发现有一个测试例子。
await page.goto(SOMEURL);

await page.reload({waitUntil: 'networkidle2'});
expect(responses.get('one-style.css').fromCache()).toBe(true);

await page.setCacheEnabled(false);
await page.reload({waitUntil: 'networkidle2'});
expect(responses.get('one-style.css').fromCache()).toBe(false);

21
如果你想要会话隔离,也可以使用以下代码: const context = await browser.createIncognitoBrowserContext(); const page = await context.newPage(); 这将为每个页面提供一个全新的开始。

3
嘿,这是一个非常好的提示!我需要以孤立的 cookie 开始每一页。 - Jamesed

7
你可以使用cdpSession.send()来禁用缓存:
const client = await page.target().createCDPSession();

await client.send('Network.setCacheDisabled', {
  cacheDisabled: true,
});

或者您可以使用更易读的page.setCacheEnabled()

await page.setCacheEnabled(false);

1
每次浏览器启动时,都会清除HTTP缓存并且不包含任何cookie。
let browser = await puppeteer.launch(); // no cache, no cookies!

您可以尝试这个。对于没有缓存的情况,我使用这个方法。

你好,我知道这一点,但在我的情况下,浏览器总是在后台运行,所以我想要一种禁用缓存的方法。 - Nagarjun Prasad
我没有找到一个专业的解决方案,但我另外采用了一种方式,即设置一个定时任务来清理 /var/lib/puppet/client_data/catalog/ 目录下的目录。但在您的情况下,这并不是一个很好的建议。 - syam
2
如果您正在使用 userDataDir,那么这将无法工作。 - Eduard Jacko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接