Форма входа Python Mechanize, отправка ввода в поле со случайно сгенерированным именем

0

Я пытаюсь автоматизировать вход на сайт, http://www.tthfanfic.org/login.php.

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

Вот HTML-код формы:

<tr>
    <th><label for="urealname">User Name</label></th>
    <td><input type='text' id='urealname' name='urealname' value=''/> NOTE: Your user name may not be the same as your pen name.</td>
</tr>
<tr>
    <th><label for="password">Password</label></th><td><input type='password' id='password' name='e008565a17664e26ac8c0e13af71a6d2'/></td>
</tr>
<tr>
    <th>Remember Me</th><td><input type='checkbox' id='remember' name='remember'/>
<label for="remember">Log me in automatically for two weeks on this computer using a cookie. </label> Do not select this option if this is a public computer, or you have an evil sibling.</td>
</tr>
<tr>
    <td colspan='2' style="text-align:center">
        <input type='submit' value='Login' name='loginsubmit'/>
    </td>
</tr>

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

Вот код, который я получаю при печати формы с помощью механизации:

<POST http://www.tthfanfic.org/login.php application/x-www-form-urlencoded

  <HiddenControl(ctkn=a40e5ff08d51a874d0d7b59173bf3d483142d2dde56889d35dd6914de92f2f2a) (readonly)>

  <TextControl(urealname=)>

  <PasswordControl(986f996e16074151964c247608da4aa6=)>

  <CheckboxControl(remember=[on])>

  <SubmitControl(loginsubmit=Login) (readonly)>>

Последовательность чисел в PasswordControl - это часть, которая изменяется при каждом повторном загрузке страницы, в HTML с сайта, по-видимому, есть несколько других тегов, приписываемых ему, но ни один из них не работает, когда я пытаюсь их выбрать, m делать это неправильно.

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

fieldTwo = br.form.find_control(label='password')

    br[fieldOne] = identifier

    br[fieldTwo] = password

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

Итак, возможно ли мне выбрать passwordControl, используя его метку, тип или идентификатор, или мне нужно очистить его имя?

EDIT: Ой, забыл добавить сообщение об ошибке:

raise ControlNotFoundError("no control matching "+description)

mechanize._form.ControlNotFoundError: no control matching label 'password'

РЕШИТЬ:

Решение, данное парнем на reddit, благодаря Bliti.

Рабочий код:

br.select_form(nr=2)
list = []
    for f in br.form.controls:           
        list.append(f.name)
    fieldTwo = list[2]
Теги:
forms
login
mechanize

1 ответ

0
Лучший ответ

Решение, данное парнем на reddit, благодаря Bliti.

Рабочий код:

#Select the form you want to use.
br.select_form(nr=2)
list = []
    for f in br.form.controls: 
        #Add the names of each item in br.formcontrols          
        list.append(f.name)
    #Select the correct one from the list.
    fieldTwo = list[2]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню