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

如何从Playwright的Request对象中获取multipart/form-data类型表单数据

原因说明

Playwright Python SDK 目前未原生提供解析 multipart/form-data 类型请求表单的公开API,且默认不会缓冲包含大负载/上传文件的multipart请求体,所以你获取post_data、post_data_buffer、post_data_json三个属性都会返回None。

可用解决方案

方案:手动解析原始请求体

你可以配合第三方表单解析库python-multipart手动解析请求内容,步骤如下:

  1. 先安装依赖
pip install python-multipart
  1. 修改路由处理逻辑,示例代码如下:
from io import BytesIO
from multipart import MultipartParser, parse_options_header
from playwright.async_api import Route, Request

async def handler(route: Route, request: Request):
    content_type = request.header_value("Content-Type")
    # 仅处理multipart类型的POST/PUT请求
    if (
        request.method in ["POST", "PUT"]
        and content_type
        and "multipart/form-data" in content_type
    ):
        # 解析multipart请求的boundary参数
        _, options = parse_options_header(content_type)
        boundary = options.get("boundary", b"").decode()
        # 获取请求原始二进制内容
        raw_body = (await request.fetch()).body()
        # 解析表单数据
        parser = MultipartParser(BytesIO(raw_body), boundary)
        form_data = {}
        for part in parser:
            # 普通文本字段处理
            if not part.filename:
                form_data[part.name] = part.raw_data.decode(part.charset or "utf-8")
            # 文件字段处理,可按需提取文件名、MIME类型、文件二进制内容
            else:
                form_data[part.name] = {
                    "filename": part.filename,
                    "content_type": part.content_type,
                    "content": part.raw_data
                }
        # 此处可对解析后的form_data做自定义处理
        print(form_data)
    
    # 继续请求流程,不打断原有业务
    await route.continue_()

await page.route("**/*", handler=handler)

注意事项

  • 如果你使用的Playwright版本低于1.30,建议先升级到最新版本,无文件的轻量multipart表单在高版本中可以直接通过request.post_data_buffer获取原始内容
  • 如果表单包含大体积上传文件,注意调整解析逻辑避免全量加载到内存导致OOM问题
  • request.fetch()方法不会重复发送请求,属于Playwright路由处理的标准内置方法,不会影响原有请求的正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:02