【问题标题】:Post to google form using Python issue使用 Python 问题发布到谷歌表单
【发布时间】:2023-03-26 07:33:01
【问题描述】:

这是我的谷歌表单的网址: https://docs.google.com/forms/d/e/1FAIpQLSfhLUFVzPk48c-Mdbc1N1ImVAtsZ_8WaQESydWrXOsJvz2rRw/viewform

这是我拥有的 Python 代码:

    import requests

    url = "https://docs.google.com/forms/d/e/1FAIpQLSfhLUFVzPk48c-Mdbc1N1ImVAtsZ_8WaQESydWrXOsJvz2rRw/formResponse"
    s = requests.Session()
    datos = {"entry.1155905730":"TRES", "entry.2110183202":"DOS", "fvv":1, 'draftResponse':[],'pageHistory':0}    
    x = s.post(url, data=datos)

我在我的谷歌表单中得到空的回复,好像所有的答案都是空白的。

我错过了什么?

【问题讨论】:

    标签: python google-forms


    【解决方案1】:

    在开始填写之前,您需要发送一个帖子进入表单,这是您看到您发布的链接的方式:https://docs.google.com/forms/d/e/1FAIpQLSfhLUFVzPk48c-Mdbc1N1ImVAtsZ_8WaQESydWrXOsJvz2rRw/viewform

    尝试使用 DevTools 检查器尝试重现请求和响应,检查“下一步”按钮,在“网络”选项卡中,您可以找到让您进入表单的请求:

    如何用 python 重现它们?一个很酷的网站,可以在 python 代码中转换 curl 请求curl.trillworks

    粘贴请求并发送!

    In [1]: import requests 
       ...:  
       ...: headers = { 
       ...:     'authority': 'docs.google.com', 
       ...:     'cache-control': 'max-age=0', 
       ...:     'origin': 'https://docs.google.com', 
       ...:     'upgrade-insecure-requests': '1', 
       ...:     'content-type': 'application/x-www-form-urlencoded', 
       ...:     'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like 
       ...: Gecko) Chrome/79.0.3945.117 Safari/537.36', 
       ...:     'sec-fetch-user': '?1', 
       ...:     'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.
       ...: 8,application/signed-exchange;v=b3;q=0.9', 
       ...:     'x-chrome-connected': 'id=102279514883169871637,mode=0,enable_account_consistency=false,consist
       ...: ency_enabled_by_default=false', 
       ...:     'x-client-data': 'CJW2yQEIpbbJAQjEtskBCKmdygEI6qzKAQicrcoBCMuuygEIvbDKAQiOssoBCPe0ygEIl7XKAQiYt
       ...: coBCOy1ygEI4bbKARirpMoB', 
       ...:     'sec-fetch-site': 'same-origin', 
       ...:     'sec-fetch-mode': 'navigate', 
       ...: } 
       ...:  
       ...: data = { 
       ...:   'fvv': '1', 
       ...:   'draftResponse': '[null,null,"4300515041069574030"]\r\n', 
       ...:   'pageHistory': '0', 
       ...:   'fbzx': '4300515041069574030', 
       ...:   'continue': '1' 
       ...: } 
       ...:  
       ...: response = requests.post('https://docs.google.com/forms/u/0/d/e/1FAIpQLSfhLUFVzPk48c-Mdbc1N1ImVAtsZ
       ...: _8WaQESydWrXOsJvz2rRw/formResponse', headers=headers, data=data) 
       ...:  
    In [2]: 'DOS' in response.text    # And boom!                                                                         
    Out[2]: True
    

    【讨论】:

    • 对!我必须通过第一种形式,但我不明白。这个帖子现在要转到下一个表格,然后我必须做另一个帖子,对吗?此外,response.text 中的“DOS”返回 true。但其他任何事情也是如此......我在 response.text 中尝试了 '1234' 和 'ola' 并且都返回了 true。
    • 你的问题是What am I missing?,所以我认为你之前测试过你发布的代码并且工作正常。响应文本中带有“DOS”的行是为了证明您传递给表单,响应包含“ola”,因为它也在表单中,而“1234”可能在其他地方
    • 对不起!!!起初我不明白你的答案,但经过几次测试,我现在明白了你所说的,你 100% 回答了我的问题!如果我可以两次投票给你,我会的。谢谢!!!
    • 没问题老兄(还有 hablo español :v)如果您还有其他疑问,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多