【问题标题】:Enter username in input inside of label using Mechanize in Python在 Python 中使用 Mechanize 在标签内输入用户名
【发布时间】:2013-11-05 02:03:51
【问题描述】:

我正在开发一个需要在 python 中使用 Mechanize 登录的项目。

无法通过名称访问表单中的登录名。我对 HTML 不太熟悉,但它似乎与引用登录输入字段的标签有关。

对于那些不熟悉机械化的人,你几乎可以忽略它。只要知道br.form['xzy'] = '123' 将名称为“xyz”的字段设置为“123”,无论当前选择何种形式。所以简而言之,问题是找到用户名输入字段的正确名称或解决方法。

这就是 python 机械化代码的样子...

br.select_form(nr=0)
br.form['username'] = 'dave'
br.form['password'] = 'cats123'
session = br.submit()

这就是我正在处理的页面的 HTML 中输入的样子...

<label for="username" class="fl-label"><span class="accesskey">A</span>ccount:</label>
<input id="username" name="username" class="required" tabindex="1" accesskey="n" type="text" value="" size="32" autocomplete="false"/>

这是我遇到的错误...

File "vcl.py", line 12, in maristLogin
    br.form['username'] = 'steh'
mechanize._form.ControlNotFoundError: no control matching name 'username'

【问题讨论】:

  • 你能显示你正在处理的页面吗?
  • 当然,我把它放在了一个 pastebin 里:pastebin.com/8jd1KjNm
  • 尝试打印响应,您确定这是正确的页面吗?
  • 是的,刚刚检查过。我让它打印出 url、标题和原始代码。这三个都是正确的。
  • 这些输入可能是由 javascript 添加的。检查一下。如果这是真的,you cannot use straight Mechanize.

标签: javascript python login mechanize


【解决方案1】:

页面上是否还有其他表单,或者整个页面是否都在该 pastebin 中? 您可以随时尝试使用以下代码,以确保获得所需的表单。

for form in br.forms():
        if form.attrs['id'] == 'fm1':
            br.form = form

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多