Selenium使用时出现content-length异常增大问题是什么原因?
Selenium提交表单请求体异常增大常见成因及排查方案
这是Selenium搭配旧版本ChromeDriver使用时的常见问题,核心成因集中在以下几类:
- ChromeDriver内置网络跟踪逻辑异常:v93版本ChromeDriver存在已知的网络层bug,自动化会话默认开启的请求日志捕获功能,会在提交包含二进制内容的表单时,将浏览器缓存的其他同域资源、请求链路日志意外注入到POST请求体中,直接导致content-length暴增。
- 表单隐藏字段被意外修改:如果脚本中使用了无差别的元素定位、全局
send_keys操作,或者注入的JS脚本存在逻辑漏洞,很容易误修改表单内隐藏的CSRF令牌、会话校验字段的内容,将页面缓存的base64格式图片、DOM结构数据写入隐藏字段,随表单一起提交。 - 文件上传逻辑缺陷:如果表单包含图片上传操作,v93版本ChromeDriver的原生
send_keys上传逻辑存在冗余写入问题,会重复读取文件内容、或者将本地文件的全路径、系统缓存的额外二进制数据写入请求体,而非仅写入文件本身的有效内容。 - 会话缓存污染:若Selenium启动Chrome时未开启无痕模式,之前会话留存的本地存储、缓存数据可能被附加到同域POST请求中,导致请求体异常增大。
快速排查方案
- 启动Chrome时添加
--incognito、--disable-extensions、--disable-plugins参数,禁用所有非必要功能后复测请求大小 - 开启ChromeDriver的性能日志,捕获Selenium提交表单时的完整请求payload,对比手动提交的payload定位冗余内容来源
- 若为图片上传场景,可替换为JS注入的方式绕过ChromeDriver原生上传逻辑,示例代码如下:
# Python 环境JS注入上传文件示例 with open("test.png", "rb") as f: img_content = f.read() js = """ const file = new File([new Uint8Array(arguments[1])], arguments[0], {type: 'image/png'}); const dt = new DataTransfer(); dt.items.add(file); document.querySelector('input[type="file"]').files = dt.files; """ driver.execute_script(js, "test.png", img_content)
内容的提问来源于stack exchange,提问作者Matthew Harris
相关产品推荐
相关产品推荐

