Python机械化登录到网站没有找到任何形式

时间:2015-07-06 14:17:27

标签: 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

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

2 个答案:

答案 0 :(得分:1)

问题是,您点击的页面仅由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)

应该选择第一个表单,但没有找到表单。不幸的是,最好的办法就是不要机械化。

尝试Watir(Ruby)或者只是去Selenium并使用报废。

答案 1 :(得分:0)

我已经重新审视了这个并解决了问题我已经使用PHP脚本来使用CURL并使用来自缓存会话的登录数据来通过登录屏幕。