Python Mechanize 登录表单,将输入发送到具有随机生成名称的字段

标签 python html forms login mechanize

我正在尝试自动登录站点,http://www.tthfanfic.org/login.php .

我遇到的问题是密码字段的名称是随机生成的,我尝试使用它的标签、类型和 ID,所有这些都保持静态但无济于事。

这是表单的 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>

我试图格式化它以提高可读性,但它看起来仍然很糟糕,请考虑检查提供的页面上的代码。

这是我通过 Mechanize 打印表单时得到的代码:
<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 中,它似乎有几个其他标签归属于它,但是当我尝试选择它们时,它们都不起作用,或者我'我做错了。

这是我用来尝试按标签选择控件的代码:
fieldTwo = br.form.find_control(label='password')

    br[fieldOne] = identifier

    br[fieldTwo] = password

如果需要,我可以发布其余的登录代码,但这是唯一不起作用的部分,我在其他密码名称保持不变的网站上取得了成功。

那么,我是否可以使用它的标签、类型或 ID 来选择 passwordControl,或者我是否需要刮取它的名称?

编辑:哎呀,忘了添加错误信息:
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]

最佳答案

一个人在 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]

关于Python Mechanize 登录表单,将输入发送到具有随机生成名称的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18856970/

相关文章:

html - 在 VS Code 中禁用 HTML 注释的自动关闭

javascript - HTML Canvas 元素不显示图像

javascript - 输入字段焦点后的工具提示

python - 如何给信件添加重音符号?

python - Django 模型表单集和命名 url

python - 与 Celery 和 RabbitMQ 进行主题交流

python - 在 pandas 中读取 csv 文件并获取值

html - 垂直溢出到正文中嵌入论坛对象的页脚

php - Laravel 表单方法 get - url 参数

jquery - 三个复选框,必须选中一个才能启用提交按钮,需要 Jquery 吗?