25

私はpythonで機械化に取り組んでいます。

<form action="/monthly-reports"  accept-charset="UTF-8" method="post" id="sblock">

ここのフォームには名前がありません。それを使用してフォームを解析するにはどうすればよいidですか?

4

7 に答える 7

23

これは、同じ問題の解決策として見つかりました。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"

于 2012-12-02T06:20:44.823 に答える
15

python412524 の例を少し改善すると、ドキュメントにはこれも有効であると記載されており、少しすっきりしています。

for form in br.forms():
    if form.attrs['id'] == 'sblock':
        br.form = form
        break
于 2013-06-25T16:33:09.283 に答える
8

将来の視聴者のために、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

于 2014-07-04T13:08:42.083 に答える
3

を使用してみてください。br.select_form(nr=0)ここで、nrはフォーム番号です(名前やIDは必要ありません)。

于 2012-05-08T11:19:19.733 に答える
1

試してみてください:

[f.id for f in br.forms()]

ページからすべてのフォームIDのリストを返す必要があります

于 2012-05-08T08:46:11.927 に答える
0

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")   
于 2016-07-04T15:23:26.407 に答える