Отправка форм с помощью Mechanize (Python) - PullRequest
8 голосов
/ 20 декабря 2011

Что ж, я пытаюсь войти на сайт с помощью Python и механизировать.

Я открыл сайт:

site = br.open("http://example.com/login.php")

И у меня есть списокформы (с br.forms).

<GET http://example.com/search.php application/x-www-form-urlencoded
<HiddenControl(search=1) (readonly)>
...
<POST http://example.com/login.php application/x-www-form-urlencoded
<TextControl(username=)>
<PasswordControl(password=)>
<CheckboxControl(stay=[1])>
<SubmitControl(<None>=Log in) (readonly)>>

Я пытался отправить поля имени пользователя и пароля.

Я пытался сделать это так:

br.select_form(nr=0)
br.form["username"] = 'usernamehere'
br.form["password"] = 'passwordhere'
br.submit()

Затем я понял, что формы, которые я пытался заполнить, были не первыми на странице, но изменение 0 не помогло ни с чем.Что я должен сделать для выбора формы на такой странице?

Однако!Это не единственная проблема.

Когда я ее запускаю, я получаю эту ошибку:

Traceback (most recent call last):
File "C:\Python26\login.py", line 34, in <module>
br.form["username"] = 'usernamehere'
...
ControlNotFoundError: no control matching name 'username'

Как я могу это исправить?Д: Или я делаю это совершенно неправильно?Если это последнее, как бы я это сделал?

Ответы [ 2 ]

4 голосов
/ 20 декабря 2011

, чтобы выбрать форму, используя ее имя, вы должны использовать:

br.select_form(name="order")

что вы здесь делаете:

br.form["username"] = 'usernamehere'

пытается установить значение для элемента управления в выбранной форме, поэтому, когда он не может его найти, он выдает исключение, которое вы видите.

0 голосов
/ 20 декабря 2011

У вас может быть несколько проблем

  • если форма генерируется с помощью javascript, вы не можете решить ее с помощью механизации - по крайней мере, не прямым путем - в этом случае яРекомендую попробовать и использовать selenium - вы можете попытаться просмотреть исходный HTML-код страницы - если у вас нет формы в чистом HTML, довольно ясно, что она вставлена ​​в DOMпо JavaScriptКроме того, если форма отправлена ​​через javascript, механизация не поможет вам

  • также, форма может отсутствовать на первой странице - вам может потребоваться настроить механизацию так, чтобы она следовала перенаправлениям

...