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

使用Python+Playwright上传1GB以上文件到测试网站出现溢出错误如何解决

问题原因

该OverflowError属于Playwright旧版本的已知传输层限制:底层和浏览器通信的消息使用4字节无符号整数存储payload长度,理论最大支持4GB的单条消息,加上序列化过程的额外开销,实际单文件超过1GB就可能触发整数溢出报错。你使用的set_files方法默认会把文件全量读入内存序列化后再传输给浏览器,刚好触发了这个限制。

解决方案

方案1:升级Playwright到最新稳定版(优先推荐)

官方在1.27及后续版本优化了大文件上传逻辑,底层实现了分块传输处理,无需修改业务代码即可直接支持GB级文件上传。
执行以下命令完成升级:

pip install --upgrade playwright
# 升级后同步更新对应版本的浏览器驱动
playwright install

升级完成后直接运行你原本的代码即可正常完成上传。

方案2:JS注入绕过传输限制(适配无法升级版本的场景)

如果你的运行环境受限制无法升级Playwright版本,可以直接通过执行JS操作页面原生上传逻辑,让浏览器自主读取文件,不走Playwright的文件序列化传输流程,自然不会触发传输层大小限制:

page.evaluate("""(filePath) => {
  // 定位页面上传input元素
  const uploadInput = document.querySelector('input[type="file"]');
  // 构造文件对象触发上传事件
  const dataTransfer = new DataTransfer();
  dataTransfer.items.add(new File([], filePath));
  uploadInput.files = dataTransfer.files;
  // 触发change事件执行业务上传逻辑
  uploadInput.dispatchEvent(new Event('change', {bubbles: true}));
}""", "/path/to/a/file")

如果页面的上传input默认是隐藏状态,可以先修改可见性再执行上述逻辑:

# 先解除input的隐藏状态
page.evaluate("""document.querySelector('input[type="file"]').style.display = 'block'""")
# 再执行上传逻辑
page.evaluate("""(filePath) => {
  const uploadInput = document.querySelector('input[type="file"]');
  const dataTransfer = new DataTransfer();
  dataTransfer.items.add(new File([], filePath));
  uploadInput.files = dataTransfer.files;
  uploadInput.dispatchEvent(new Event('change', {bubbles: true}));
}""", "/path/to/a/file")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:27:04