python-3.x - 无法使用 robobrowser 提交表单。无效提交错误

标签 python-3.x request beautifulsoup robobrowser

这是我的代码:
从 robobrowser 导入浏览器

    url = 'http://diesel.elcat.kg/index.php?act=Login&CODE=00'
    url3 = 'http://diesel.elcat.kg/index.php?act=post&do=reply_post&f=178&t=233500064'
    m = browser.RoboBrowser()
    m.open(url)
    # SIGNING IN(form1)
    form1 = m.get_form(action='https://diesel.elcat.kg/index.php?act=Login&CODE=01')
    form1['UserName'].value = 'Username'
    form1['PassWord'].value = 'Password'
    m.submit_form(form1)
    # FINISHED SIGNING IN(everything worked)
    # GOING TO THE PAGE WHERE FORM IS LOCATED
    m.open(url3)
    # Can't submit this form
    form2 = m.get_form(action="http://diesel.elcat.kg/index.php?")
    form2['Post'].value = 'up'
    m.submit_form(form2)

我可以登录网站,以便 form1 工作,但是当我尝试在这种情况下发表评论(向上)时,form2 不起作用。我不断收到 InvalidSubmit 错误或错误请求错误。 form1 的代码和 form2 的代码似乎是一样的,但是一个有效,另一个无效。我正在使用 python3.5 和 robobrowser,如果有帮助的话,我正在使用 Mac OS。先感谢您。
这是我的回溯:
Traceback (most recent call last):
File "/Users/bkkadmin/Desktop/Daniiar/upper/test2.py", line 18, in <module>
 m.submit_form(form)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/robobrowser-0.5.3-py3.5.egg/robobrowser/browser.py", line 339, in submit_form
 payload = form.serialize(submit=submit)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/robobrowser-0.5.3-py3.5.egg/robobrowser/forms/form.py", line 226, in serialize
 include_fields = prepare_fields(self.fields, self.submit_fields, submit)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/robobrowser-0.5.3-py3.5.egg/robobrowser/forms/form.py", line 154, in prepare_fields
 raise exceptions.InvalidSubmitError()
robobrowser.exceptions.InvalidSubmitError

最佳答案

我今天遇到了同样的问题,有同样的错误。上述问题的一个可能原因是你的form2实际上包含了多个提交字段,对应于原始html中的多个提交按钮。您可以通过 print(len(list(form2.submit_fields.items(multi=True)))) 查看此信息.如果是这种情况,请调用 submit_form必须修改为 m.submit_form(form2, submit=your_submit) ,其中第二个参数 your_submit是您要使用的相关提交字段。此 reference讨论如何提取您想要的提交字段。

顺便说一句,如果你想知道哪里长print代码来自,它来自prepare_fields的正文在 robobrowser/forms/form.py 中,这在您发布的错误输出之一中指出。

希望这可以帮助!

关于python-3.x - 无法使用 robobrowser 提交表单。无效提交错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220285/

相关文章:

javascript - react : How optimize a custom hook that shares data?

javascript - Ajax 就绪状态 : 0 always in javascript

python - Beautiful Soup 将 < 替换为 <

python - 如何在 BeautifulSoup 中获得嵌套元素

python - 我需要使用 kubernetes python 客户端获取 Kubernetes 集群中 Pod 的资源使用情况

python - IPython 自动完成调用 __getattr__

c - 如何使用C发送HTTP格式的文件

python - 如何从元组列表中删除行?

python - 将三元素元组列表转换为字典

Python从网站上抓取fb评论