You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer连接proxy时无法正常使用缓存的解决方法咨询

问题解决方案:Puppeteer搭配轮换代理时启用缓存的配置方法

Puppeteer默认会把代理服务器标识作为缓存分区的依据之一,当你使用不同IP的轮换代理时,浏览器会认为每个代理对应不同的网络上下文,自动给每个代理分配独立的缓存分区,跨代理的缓存无法复用,部分代理配置也会默认触发禁用磁盘缓存的逻辑。可通过以下配置调整实现缓存复用:

  • 首先关闭Chromium的缓存分区功能,启动Puppeteer时添加--disable-features=SplitCacheByNetworkIsolationKey,SplitCacheByTopFrameSite启动参数,这两个参数会禁用Chromium默认按网络上下文、顶级站点拆分缓存的逻辑,让所有代理请求共用同一份缓存池。
  • 显式开启磁盘缓存,添加启动参数--disk-cache-size=1073741824,后面的数值是缓存最大占用空间,单位为字节,示例配置为1GB,可根据自身需求调整。如果需要指定缓存存储路径,可额外添加--disk-cache-dir=/path/to/your/cache/dir参数,固定缓存存储位置,多worker场景下如果需要共用缓存,可将所有worker的缓存路径指向同一目录,注意提前配置目录读写权限。
  • 调整Puppeteer的请求拦截逻辑(如果开启了请求拦截):不要强制给所有请求设置cache-control: no-cache头,对于静态资源(js、css、图片、字体等)可保留默认请求头,或者主动设置cache-control: public, max-age=86400提升缓存命中率。
  • 轮换代理场景下的额外配置:如果每个worker使用独立代理且不需要跨worker复用缓存,只需要给每个worker单独配置独立的缓存目录即可,避免多个worker同时读写同一份缓存文件出现冲突。

你可以参考以下示例启动代码:

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch({
  args: [
    '--proxy-server=your-proxy-ip:port', // 替换为对应worker的代理地址
    '--disable-features=SplitCacheByNetworkIsolationKey,SplitCacheByTopFrameSite',
    '--disk-cache-size=1073741824', // 配置1GB缓存空间
    '--disk-cache-dir=./worker-1-cache' // 每个worker对应独立的缓存路径
  ],
  headless: 'new'
});

注意:如果你的代理服务本身添加了强制不缓存的响应头(cache-control: no-store、pragma: no-cache等),需要先调整代理服务的配置,移除这类强制禁用缓存的头,否则浏览器侧的配置不会生效。

内容的提问来源于stack exchange,提问作者Farruh Sydykov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:45:02