2016-07-06 5 views
2

は、ここに私のコードです: 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) 

私は、Form2がないウェブサイトにそうForm1の作品をサインインが、私はこのケースでしようとすると(アップ)コメントを残すことができますInvalidSubmitエラー、またはBad Requestエラーのいずれかが発生しています。フォーム1のコードとフォーム2のコードは同じように見えますが、一方は動作し、もう一方は動作しません。私は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

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

ちなみに、printのコードがどこから来るのか疑問に思うなら、あなたが投稿したエラー出力の1つに示されているrobobrowser/forms/form.pyのprepare_fieldsの本文から来ています。

希望すると便利です。

関連する問題