10

mechanizeでフォームを選びたいです。これは私のコードです:

br = mechanize.Browser()
self.br.open(url)
br.select_form(name="login_form")

フォームのコード:

<form id="login_form" onsubmit="return Index.login_submit();" method="post" action="index.php?action=login&server_list=1">

しかし、私はこのエラーを受け取ります:

mechanize._mechanize.FormNotFoundError: no form matching name 'login_form
4

2 に答える 2

24

問題は、フォームに名前がなく、IDのみがあり、それがであるということですlogin_form。述語を使用できます。

br.select_form(predicate=lambda f: f.attrs.get('id', None) == 'login_form')

(ここでf.attrs、キーがあるかどうかを確認し、持っているid 場合、id値はに等しくなりますlogin_form)。または、最初のフォームか2番目のフォームかがわかっている場合は、ページ内のフォームの番号を渡すことができます。たとえば、次の行で最初のフォームを選択します。

br.select_form(nr=0)
于 2011-10-06T15:56:50.547 に答える
1

もう少し読みやすい:

class Element_by_id:
    def __init__(self, id_text):
        self.id_text = id_text
    def __call__(self, f, *args, **kwargs):
        return 'id' in f.attrs and f.attrs['id'] ==self.id_text

それから:

b.select_form(predicate=Element_by_id("login_form"))
于 2013-02-22T21:24:42.700 に答える