各位程序员好!
我试图用python和mechanize模块编写一个脚本来登录我的大学“食物平衡”页面。。。
这是我试图登录的页面:http://www.wcu.edu/11407.asp 网站有以下登录表格:
<FORM method=post action=https://itapp.wcu.edu/BanAuthRedirector/Default.aspx><INPUT value=https://cf.wcu.edu/busafrs/catcard/idsearch.cfm type=hidden name=wcuirs_uri>
<P><B>WCU ID Number<BR></B><INPUT maxLength=12 size=12 type=password name=id> </P>
<P><B>PIN<BR></B><INPUT maxLength=20 type=password name=PIN> </P>
<P></P>
<P><INPUT value="Request Access" type=submit name=submit> </P></FORM>
从这里我们知道我需要填写以下字段: 一。名称=id 2。名称=管脚
操作:action=https://itapp.wcu.edu/BanAuthRedirector/Default.aspx
这是我迄今为止写的剧本:
#!/usr/bin/python2 -W ignore
import mechanize, cookielib
from time import sleep
url = 'http://www.wcu.edu/11407.asp'
myId = '11111111111'
myPin = '22222222222'
# Browser
#br = mechanize.Browser()
#br = mechanize.Browser(factory=mechanize.DefaultFactory(i_want_broken_xhtml_support=True))
br = mechanize.Browser(factory=mechanize.RobustFactory()) # Use this because of bad html tags in the html...
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# User-Agent (fake agent to google-chrome linux x86_64)
br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('Accept-Encoding', 'gzip,deflate,sdch'),
('Accept-Language', 'en-US,en;q=0.8'),
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
# The site we will navigate into
br.open(url)
# Go though all the forms (for debugging only)
for f in br.forms():
print f
# Select the first (index two) form
br.select_form(nr=2)
# User credentials
br.form['id'] = myId
br.form['PIN'] = myPin
br.form.action = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
# Login
br.submit()
# Wait 10 seconds
sleep(10)
# Save to a file
f = file('mycatpage.html', 'w')
f.write(br.response().read())
f.close()
现在的问题。。。
出于某种奇怪的原因,我返回的页面(在my cat page.html中)是登录页面,而不是显示我的“猫现金余额”和“块餐数量”的预期页面。。。
有人知道为什么吗?请记住,头文件的所有内容都是正确的,虽然id和pass不是真正的111111111和22222222,但正确的值确实适用于网站(使用浏览器…)
提前谢谢
编辑
我试过的另一个剧本:
from urllib import urlopen, urlencode
import urllib2
import httplib
url = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
myId = 'xxxxxxxx'
myPin = 'xxxxxxxx'
data = {
'id':myId,
'PIN':myPin,
'submit':'Request Access',
'wcuirs_uri':'https://cf.wcu.edu/busafrs/catcard/idsearch.cfm'
}
opener = urllib2.build_opener()
opener.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('Accept-Encoding', 'gzip,deflate,sdch'),
('Accept-Language', 'en-US,en;q=0.8'),
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
request = urllib2.Request(url, urlencode(data))
open("mycatpage.html", 'w').write(opener.open(request))
这有同样的行为。。。
我在搞乱w/ASPX时使用的另一个解决方案是robobrowser。
例如:
注意:您可能需要更新表单,以便在提交之前将隐藏的表单域(如
__VIEWSTATE
)和好友添加到表单中。更多信息请参见this文章。我相信这就是问题所在。
试着把它改成
我也很确定您不需要
br.form.action = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
,因为您已经选择了表单,所以只需调用submit就可以了,但我可能错了。此外,我还使用urllib和urllib2完成了类似的任务,因此如果这不起作用,我将发布该代码。
编辑:以下是我在urllib和urllib2中使用的技术:
编辑2:
这可能是你的问题?不确定。
编辑3:
使用html检查器,我认为您有很大的机会需要将“wcuir”设置为“https://cf.wcu.edu/busafrs/catcard/idsearch.cfm”。我百分之九十五肯定那会有用的。
我建议使用以下库:http://docs.python-requests.org/en/latest/
这是一个又好又容易的图书馆。它有很好的文档。我使用这个库来执行不同类型的脚本,就像您正在执行的脚本一样。
你需要这样做:
你可以得到更多信息here
相关问题 更多 >
编程相关推荐