Python机械化登录到网站找不到表单



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

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填充,并且没有创建可供您拾取的对象。机械化需要一个对象才能到达表单,但在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并在那里使用报废。

我重新研究了这个问题,为了解决这个问题,我使用了一个PHP脚本来使用CURL,并使用缓存会话中的登录数据来通过登录屏幕。

最新更新