【问题标题】:How can I disable cache in puppeteer?如何在 puppeteer 中禁用缓存?
【发布时间】:2018-07-23 12:52:38
【问题描述】:

我想在 puppeteer 中禁用缓存,谁能告诉我该怎么做?我找到了这个page.setCacheEnabled(enabled),但我不明白如何使用它。

我知道浏览器在没有缓存或 cookie 的情况下启动,但在我的情况下,浏览器始终在后台运行,因此需要不同的解决方案。

【问题讨论】:

    标签: javascript node.js puppeteer


    【解决方案1】:

    您可以使用cdpSession.send() 禁用缓存:

    const client = await page.target().createCDPSession();
    
    await client.send('Network.setCacheDisabled', {
      cacheDisabled: true,
    });
    

    或者,您可以使用更具可读性的page.setCacheEnabled()

    await page.setCacheEnabled(false);
    

    【讨论】:

      【解决方案2】:

      如果你想要会话隔离,还有: const context = await browser.createIncognitoBrowserContext(); const page = await context.newPage(); 这将使您在每一页上都有一个全新的开始。

      【讨论】:

      • 嘿,这是一个非常好的提示!我需要用孤立的 cookie 开始每一页
      【解决方案3】:

      根据 puppeteer 文档,您可以使用 await page.setCacheEnabled(enabled)

      这是在 12 月添加的。 See Git Hub issue #1609

      如果您查看commit changes,则有一个测试,例如

      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);
      

      【讨论】:

        【解决方案4】:

        每次浏览器启动都从干净的 HTTP 缓存开始,并且没有任何 cookie。

        let browser = await puppeteer.launch(); // no cache, no cookies!
        

        你可以试试这个。对于我没有缓存的情况,我正在使用它。

        【讨论】:

        • 您好,我知道这一点,但在我的情况下,浏览器总是在后台运行,所以我想要一种禁用缓存的方法。
        • 我没有为此找到专家解决方案,通过另一种方式,我已经放置了一个 cron 以在特定时间间隔从 /var/lib/puppet/client_data/catalog/ 清除目录。在您的情况下,这并不可取。
        • 如果您使用的是userDataDir,那么这将不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-30
        • 2015-11-18
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        相关资源
        最近更新 更多