2017-12-01 3 views
1

私はrobobrowserと協力してWebサイトにログインしています。robobrowser名前でフォームを検索する方法

私の問題点は、ログインページには2つのフォームがあり、どちらも同じアクションが使用されていますが、名前は異なります。

<form action="/login" name="changedomain"> 
... 
</form> 

2番目の形式は次のとおりです。私のPythonのコードがどのように見える

<form action="/login" name="signin"> 
... 
</form> 

import re 
from robobrowser import RoboBrowser 
browser = RoboBrowser(history=True, parser="lxml") 
browser.open("http://example.com") 
form = browser.get_form() 

私が使用している場合は問題がある:

form = browser.get_form()[1] 

私はBadRequestKeyErrorを取得、私はどのようにロケートするためのドキュメントを見つけることができません名前によるフォーム。唯一のドキュメントにはアクションの使用が記載されていますが、フォームには同じアクション属性があります。 ご意見をお待ちしております。

+0

これをテストしていない'get_form'は標準のBeautifulSoup引数を受け入れますので、次のようにします:' browser.get_form({'name': 'signin'}) ' – jojo

答えて

1

私は以下のコードを使用しています。

form = browser.get_form('Form1') 

これは、フォームのhtmlを印刷する別の例です。二番目の形式を選択する方法の

from robobrowser import RoboBrowser 

browser = RoboBrowser(history=True, parser="html.parser") 
browser.open("https://stackoverflow.com") 
form = browser.get_form(id="search") 
print(form.parsed) 

利回り

<form action="/search" autocomplete="off" class="searchbar" id="search" method="get" role="search"> 
<input autocomplete="off" class="f-input js-search-field" maxlength="240" name="q" placeholder="Search…" tabindex="1" type="text" value=""/> 
<button aria-label="Search..." class="btn-topbar-primary js-search-submit" type="submit"><svg aria-hidden="true" class="svg-icon iconSearch" height="18" viewbox="0 0 18 18" width="18"><path d="M12.86 11.32L18 16.5 16.5 18l-5.18-5.14v-.35a7 7 0 1 1 1.19-1.19h.35zM7 12A5 5 0 1 0 7 2a5 5 0 0 0 0 10z"></path></svg></button> 
</form> 
+0

一度選択すると、選択したフォームのソースを印刷して、正しい形? @dnraikes; – dnraikes

+0

;私は答えを更新して 'プリント'を表示しました。私の推奨は、段階的なデバッグを可能にするpycharmのような良いIDEを使うことです。 browser.open()ステートメントを作成するだけで、デバッガのブラウザオブジェクトを調べることができ、 '解析された'プロパティがhtmlを示すことがすぐに分かります。 – SteveJ

-2

最初の答えは次のとおりです。

form = browser.get_forms()[1] # note the get_forms() not get_form() 

フォームのソースを参照してくださいする方法の2つ目の質問への答えは基本的に:

print(form) # this prints a dictionary of all input fields and their values from the selected form. 
関連する問題