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

求助:完善基于POST方法的Google表单自动填充Python脚本

完善Python脚本实现Google表单POST提交

我来帮你搞定这个Google表单提交的脚本——Google表单的POST提交逻辑和普通网页表单不太一样,你现有代码里有两个核心问题需要修正:提交URL不对,字段名用了页面显示的标签而非实际的表单参数名。下面是完整的解决方案:

第一步:获取正确的提交URL和字段名

首先你需要从Google表单的网页源码里拿到两个关键信息:

  • 提交URL:打开你的Google表单,右键选择「查看网页源代码」,找到<form>标签的action属性值,它看起来会是https://docs.google.com/forms/d/e/[你的表单ID]/formResponse(注意末尾的/formResponse,这才是真正接收POST请求的地址,不是你当前用的浏览地址)。
  • 表单字段名:每个输入框对应的name属性都是entry.开头的一串数字(比如entry.123456789),而不是页面上显示的「Name to display」「Age」这类标签。你可以在源码里搜索问题对应的输入框,找到它的name属性值。

完善后的完整代码

import urllib.parse
import urllib.request

def submit_google_form():
    # 替换成你从表单源码中复制的提交URL(必须包含/formResponse)
    submit_url = "https://docs.google.com/forms/d/e/1FAIpQLSec7NTUhCXGqeBxUfNraWHAd2Kf8aHg0tVy3fY0*****TF2Kw/formResponse"
    
    # 替换成你找到的实际entry字段名,键是entry.xxx,值是要提交的内容
    form_data = {
        'entry.123456789': 'Mayank Test',  # 对应「Name to display」的字段
        'entry.987654321': '22',           # 对应「Age」的字段
        'entry.112233445': 'India'         # 对应「Country」的字段
    }
    
    # 将表单数据编码为URL格式
    encoded_data = urllib.parse.urlencode(form_data).encode('utf-8')
    
    # 设置请求头,模拟现代浏览器,避免被Google拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    
    try:
        # 创建POST请求对象
        request = urllib.request.Request(submit_url, data=encoded_data, headers=headers)
        # 发送请求并获取响应
        response = urllib.request.urlopen(request)
        
        # 检查响应状态,200表示提交成功
        if response.getcode() == 200:
            print("✅ 表单提交成功!")
        else:
            print(f"❌ 提交失败,状态码: {response.getcode()}")
    except Exception as e:
        print(f"❌ 提交过程出错: {str(e)}")

if __name__ == "__main__":
    submit_google_form()

关键注意事项

  • 必填字段必须全部填写:如果表单有必填项,对应的entry.xxx字段必须在form_data里设置值,否则提交会失败。
  • 处理隐藏字段:有些复杂的Google表单会包含隐藏字段(比如fvv、draftResponse、pageHistory等),如果提交失败,可以尝试把这些字段也加入form_data中(从源码里找到它们的默认值)。
  • 避免频繁提交:Google有反垃圾机制,短时间内多次提交可能会被拦截,建议添加适当的延迟(比如用time.sleep())。
  • 测试响应:如果提交后返回200但表单里没收到数据,大概率是字段名匹配错误,再仔细核对源码里的entry.xxx值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:22