求助:完善基于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
相关产品推荐
相关产品推荐

