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

Python中Playwright set_input_files()多文件上传异常问题

解决Playwright上传多文件仅第一个被服务器接收的问题

针对你遇到的Playwright上传两个文件但服务器仅收到第一个的问题,可按以下步骤排查解决:

1. 检查Django视图的文件处理逻辑

这是最常见的原因:如果视图中直接通过request.FILES['file_field_name']获取文件,只会拿到第一个上传的文件。必须使用getlist()方法来获取多个文件:

# 错误写法(仅获取第一个文件)
file = request.FILES['my_file_input']

# 正确写法(获取所有上传文件)
files = request.FILES.getlist('my_file_input')
for file in files:
    # 处理每个文件

2. 确认HTML输入字段的multiple属性

确保页面中的<input type="file">标签带有multiple属性,否则即使前端能选中多个文件,表单提交时可能只会发送第一个:

<input type="file" name="my_file_input" multiple>

(虽然你手动测试正常,但需确认测试环境下页面渲染的HTML是否包含该属性)

3. 用绝对路径指定文件

使用pathlib构建文件的绝对路径,避免相对路径可能导致的文件找不到问题(即使你试过绝对路径,可再按此方式验证):

from pathlib import Path

# 获取测试文件的绝对路径
test_file1 = Path(__file__).parent / "Input1.xlsx"
test_file2 = Path(__file__).parent / "Input2.xlsx"

# 设置文件输入
file_input = page.locator('input[type="file"]')
file_input.set_input_files([test_file1, test_file2])

4. 触发文件输入的change事件

部分前端框架需要监听change事件来同步文件选择状态,设置文件后手动触发该事件:

file_input.set_input_files([test_file1, test_file2])
file_input.dispatch_event("change")

5. 验证表单提交时的请求

通过Playwright监听提交请求,确认所有文件是否被正确发送:

# 等待提交请求完成
with page.expect_request_finished() as request_ctx:
    page.locator('button[type="submit"]').click()
submission_request = request_ctx.value

# 检查请求中的文件数据(可选)
form_data = submission_request.post_data
# 可打印或断言form_data中是否包含两个文件的信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:17:44