python - 无法访问 HTML 表单上的文本框

标签 python forms login input mechanize

我找不到登录文本框。我可以选择表单,但我无法找到输入文本。有人能帮我吗?

我正在尝试使用此脚本自动登录 http://www.safilonet.safilo.com/
谢谢

这是代码和错误消息:

def login(self):
url = self._baseUrl + '/webapp/commerce/safilo/jsp/logon.jsp?lng=E&cpy=10'
self._br.open(url, timeout=30.0)
self._br.select_form(name='logon') 
print 'entrou'
self._br.form['login'] = self._username
self._br.form['password'] = self._password
self._br.submit()

if self._verbose: print 'Login successful.\n'

self.last_logged_in = datetime.datetime.now()

错误信息:
Traceback (most recent call last):
File "E:\billy\Projects\GlassInteg\trunk\src\run.py", line 90, in <module> go()
File "E:\billy\Projects\GlassInteg\trunk\src\run.py", line 39, in go ss = SafiloSupplier(updateBrands=True)
File "E:\billy\Projects\GlassInteg\trunk\src\GlassInteg\Supplier.py", line 283, in __init__
if login: self.login()
File "E:\billy\Projects\GlassInteg\trunk\src\GlassInteg\Supplier.py", line 307, in login
self._br.form['login'] = self._username
File "build\bdist.win32\egg\mechanize\_form.py", line 2780, in __setitem__
File "build\bdist.win32\egg\mechanize\_form.py", line 3101, in find_control
File "build\bdist.win32\egg\mechanize\_form.py", line 3185, in _find_control

mechanize._form.ControlNotFoundError:没有控件匹配名称“登录”

最佳答案

根据 W3C validator,问题似乎是有问题的页面包含大量无效的 HTML。

如您所见, Mechanize 无法看到“登录”字段:

>>> from mechanize import Browser
>>> br = Browser()
>>> br.open('http://www.safilonet.safilo.com/webapp/commerce/safilo/jsp/logon.jsp?lng=E&cpy=10')
<response_seek_wrapper at 0x1011cc638 whose wrapped object = <closeable_response at 0x1011cc488 whose fp = <socket._fileobject object at 0x1002bd650>>>
>>> br.select_form('logon')
>>> br._pairs()
[('merchant', '23888'), ('lng', 'E'), ('cpy', '10'), ('rightPageURL', 'http://www.safilonet.safilo.com/webapp/commerce/catalog/home.html'), ('password', '')]

如果您可以控制此页面,请尽快修复 HTML。

但是,我假设您没有,所以这里有一些替代选项:
  • 使用 Selenium
  • 尝试使用直接 POST URL 登录(不确定 mechanize 是否支持)
  • 关于python - 无法访问 HTML 表单上的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860010/

    相关文章:

    python - 警告 (theano.configdefaults) : g++ not detected ! Theano 将无法执行优化的 C 实现

    html - 如果输入文本格式不是 "valid",则 "required"伪类不适用于 "email"电子邮件输入

    ruby-on-rails - 未定义的方法_path

    sockets - Web套接字: Is it bad to always use SSL when making an online game?

    asp.net-mvc - 使用 SimpleMembership 获取用户信息

    login - 如果用户无法使用他们的 OpenID 登录怎么办?

    python - 选择具有日期时间的 N 个最近唯一值的行

    Python - 如果源是文件,则 Sum 在列表理解语法中不起作用

    python - 如何从 sqlalchemy 映射创建表

    javascript - 如何在 Bootstrap 模式中提交提交数据?