无法使用robobrowser提交表单。无效的提交错误

Dan*_*iev 3 beautifulsoup request python-3.x 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)
Run Code Online (Sandbox Code Playgroud)

我可以登录该网站,以便form1可以正常工作,但是在这种情况下尝试发表评论时,form2不起作用。我一直收到InvalidSubmit错误或Bad Request错误。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
Run Code Online (Sandbox Code Playgroud)

小智 5

今天,我遇到了相同的问题,但有相同的确切错误。出现上述问题的一种可能原因是,您的form2实际上包含多个提交字段,对应于原始html中的多个提交按钮。您可以通过进行检查print(len(list(form2.submit_fields.items(multi=True))))。在这种情况下,您对的调用submit_form必须修改为m.submit_form(form2, submit=your_submit),其中第二个参数your_submit是您要使用的相关提交字段。本参考资料讨论如何提取所需的提交字段。

顺便说一句,如果您想知道长print代码的来源,它来自prepare_fieldsrobobrowser / forms / form.py的正文,这在您发布的错误输出之一中表示。

希望这可以帮助!