4

これが私のコードです:robobrowser import browserから

    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)

Web サイトにサインインできるので form1 は機能しますが、この場合にコメントを残そうとすると (up)、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
4

2 に答える 2

6

今日、まったく同じエラーで同じ問題が発生しました。上記の問題の考えられる原因の 1 つは、実際には、元の html の複数の送信ボタンに対応する複数の送信フィールドが form2 に含まれていることです。で確認できますprint(len(list(form2.submit_fields.items(multi=True))))。この場合、 への呼び出しを のsubmit_formように変更する必要がありm.submit_form(form2, submit=your_submit)ます。2 番目の引数your_submitは、使用する関連送信フィールドです。このリファレンスでは、必要な送信フィールドを抽出する方法について説明します。

printちなみに、長いコードがどこから来ているのかprepare_fieldsわからない場合は、投稿したエラー出力の 1 つに示されている robobrowser/forms/form.py の本体から来ています。

お役に立てれば!

于 2016-10-24T01:52:26.267 に答える