Python Mechanize выберите форму FormNotFoundError
Я хочу выбрать форму с механизацией. Это мой код:
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
Ответы
Ответ 1
Проблема заключается в том, что ваша форма не имеет имени, а только идентификатора, и это login_form
. Вы можете использовать предикат:
br.select_form(predicate=lambda f: f.attrs.get('id', None) == 'login_form')
(где вы, если f.attrs
имеет ключ id
, и если да, значение id
равно login_form
). Кроме того, вы можете передать номер формы на странице, если знаете, является ли она первой, второй и т.д. Например, строка ниже выбирает первую форму:
br.select_form(nr=0)
Ответ 2
немного читаем:
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"))