python-2.7 - Python Mechanize 登录网站未找到表单

标签 python-2.7 mechanize

我正在尝试登录运输门户网站,我需要从其中一个内页中获取一些详细信息。我使用了下面的脚本。

import mechanize
username = 'namehere'   # your username/email
password = 'password here'   # your password

br = mechanize.Browser()


# browser settings (used to emulate a browser)
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_debug_http(False)
br.set_debug_responses(False)
br.set_debug_redirects(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.open('http://tracking.parcelforce.net') # open parcelforce

#List the forms
#for form in br.forms():
#print "Form name:", form.name
#print form

br.select_form(name="SNP_SCM_login")
br.form[ "LOGIN_FORM" ] = username
br.form[ "PASSWORD_FORM" ] = password


br.submit() # submit the login data
print(br.response().read()) # print the response

我返回的输出没有找到任何形式。如果有人可以提供帮助,将不胜感激。

最佳答案

问题是,您点击的页面仅由 JS 填充,并且没有创建可供您选择的对象。 Mechanize 需要一个对象来访问表单,但是在 br.open() 上找不到表单

你可以自己检查一下:

request = br.open('http://tracking.parcelforce.net') # open parcelforce
print request.read()

而且你已经有了这个,它不返回任何形式:
for form in br.forms():
  print "Form name:", form.name
  print form

我尝试通过以下方式选择表单:
br.select_form(nr=0)

应该选择第一个表单,但没有找到表单。不幸的是,您最好的选择是不要使用 Mechanize 。

试试 Watir (Ruby) 或者简单地使用 Selenium 并在那里使用报废。

关于python-2.7 - Python Mechanize 登录网站未找到表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248233/

相关文章:

python - 为什么空列表的大小不是 0 字节?

Django - Apache2 内部服务器错误

Python:select()立即返回,没有数据可读取(telnetlib)

ruby - 使用 mechanize gem 时出现错误 "getaddrinfo: No such host is known. (Socke tError)"

html - 如何使用 Nokogiri 使用 CSS 选择器逐行解析?

python - 如何在 python 中使用 mechanize 为下拉菜单选择一个项目?

python - 在开放的 ERP 7 日历中添加我们国家的节假日

python - 根据列中首先出现的字符串/类别,保留该行并删除 pandas 中的其他行

ruby-on-rails - Mechanize :无法传递信息

python - 我可以填写输入字段并单击表单中没有的提交按钮吗?