Я хочу отправить формы на нескольких сайтах с механизированным. Обычно я не могу точно знать имя формы или идентификатор формы, но я знаю имя ввода, которое я хочу отправить.выбор правильной формы при повторении всех форм
Предположим, что в нем есть несколько форм. Мой код должен проверять все формы, если один из них имеет входное значение с именем «электронная почта», он отправит эту форму. Если у него есть несколько форм, он будет отправлять их все.
Веб-сайт, который я тестирую, имеет две формы. Одна из них - это форма входа в систему, другая - форма подписки. У обоих из них есть входное значение электронной почты. Поэтому мой код должен представить обе формы.
Я пытаюсь добиться его с помощью этого блока кода:
for forms in br.forms():
if not forms.find_control(name="email"):
continue
br.select_form(nr=0)
br.form["email"] = email
br.submit()
print "Success: ", link
Этот код печатает два успешных сообщения, однако это не выписывает. Следующий код работает с отправкой формы подписки, потому что я установил имя формы:
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')]
br.open("http://example.com")
br.select_form("subscribe")
br.form["email"] = email
br.submit()
Итак, что не так с первым кодом? Как я могу выбрать обе формы и представить значение? Вероятно, проблема связана с этой частью выбора формы:
br.select_form(nr=0)
Редактировать: Я проверил его POST-запросы с Wireshark. Кажется, что он заполняет первую форму 2 раза. Когда я меняю nr=0
с nr=1
, это работает, потому что правильная форма является второй формой.
Вы должны уточнить, что для этого вы используете Mechanize. Первые несколько абзацев вашего вопроса путают, потому что 99% времени, которое вы описываете там, будет в контексте веб-браузера. – borfast