私はpythonで機械化に取り組んでいます。
<form action="/monthly-reports" accept-charset="UTF-8" method="post" id="sblock">
ここのフォームには名前がありません。それを使用してフォームを解析するにはどうすればよいid
ですか?
これは、同じ問題の解決策として見つかりました。br
機械化オブジェクトです:
formcount=0
for frm in br.forms():
if str(frm.attrs["id"])=="sblock":
break
formcount=formcount+1
br.select_form(nr=formcount)
上記のループカウンターメソッドはもっとpythonicにできると確信していますが、これは属性を持つフォームを選択する必要がありますid="sblock"
。
python412524 の例を少し改善すると、ドキュメントにはこれも有効であると記載されており、少しすっきりしています。
for form in br.forms():
if form.attrs['id'] == 'sblock':
br.form = form
break
将来の視聴者のために、predicate
引数を使用した別のバージョンを次に示します。気が向いたら、これをラムダを使用して1行にすることができることに注意してください。
def is_sblock_form(form):
return "id" in form.attrs and form.attrs['id'] == "sblock"
br.select_form(predicate=is_sblock_form)
ソース: https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462
を使用してみてください。br.select_form(nr=0)
ここで、nrはフォーム番号です(名前やIDは必要ありません)。
試してみてください:
[f.id for f in br.forms()]
ページからすべてのフォームIDのリストを返す必要があります
Browser クラスの関数 select_form の predicate param を使用できます。このような:
from mechanize import Browser, FormNotFoundError
try:
br.select_form(predicate=lambda frm: 'id' in frm.attrs and frm.attrs['id'] == 'sblock')
except FormNotFoundError:
print("ERROR: Form not Found")