页面手机登入页面源代码有关问题请问,python

17:18 提问
python模拟浏览器登录,登录成功后的操作无效,dai码贴出,请帮我看看.
#coding=utf-8
import urllib
import urllib2
import cookielib
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
#登录页面,获取登录所需cookie
print u'打开登录页面'
url = "https://www.immigration.govt.nz/secure/Login+Working+holiday.htm"
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
headers = {
'Accept':'text/html, application/xhtml+xml, */*',
'X-HttpWatch-RID': '',
'Referer': 'https://www.immigration.govt.nz/',
'Accept-Language': 'zh-CN',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/ Firefox/38.0',
# 'Content-Type': 'application/x-www-form-urlencoded',
'Accept-Encoding': 'gzip, deflate',
'Host': 'www.immigration.govt.nz',
# 'Content-Length': '382',
'Connection':'Keep-Alive',
'Cache-Control': 'no-cache'
request = urllib2.Request(url,headers=headers)
opener = None
opener = urlOpener.open(request)
#解析隐藏字段 获取认证字符 cookie里面有一项 immigrationAuth,必须携带此项才能登录成功
print u"获取认证字符"
htmlCode = opener.read()
partten = re.compile(r"&[ ]*input[ ]+.*?&")
tags = re.findall(partten, htmlCode)
partten = re.compile(r"&[ ]*input[ ]+.*name[ ]*=[ ]*[\"|\'](.*?)[\"|\'][ ]+.*value[ ]*=[ ]*[\"|\'](.*?)[\"|\'].*?&")
for tag in tags:
param = re.findall(partten, tag)
data[param[0][0]] = param[0][1]
data['OnlineServicesLoginStealth:VisaLoginControl:passwordTextBox'] = 'Zz45509'
data['OnlineServicesLoginStealth:VisaLoginControl:userNameTextBox'] = 'testing___9'
data['VisaDropDown'] = '/secure/Login+Working+Holiday.htm'
data['OnlineServicesLoginStealth:VisaLoginControl:loginImageButton.x'] = '21'
data['OnlineServicesLoginStealth:VisaLoginControl:loginImageButton.y'] = '15'
data['HeaderCommunityHomepage:SearchControl:txtSearchString'] = ''
params = urllib.urlencode(data)
#print params
url = "https://www.immigration.govt.nz/Templates/Secure/Login.aspx?NRMODE=Published&NRNODEGUID=%7bBBB-49F9-BA1E-C%7d&NRORIGINALURL=%2fsecure%2fLogin%2bWorking%2bholiday%2ehtm&NRCACHEHINT=Guest"
request = urllib2.Request(url,headers=headers)
opener = urlOpener.open(request, params)
cookies = ''
cookieList = ['ASP.NET_SessionId','ImmigrationAuth','TS0120d49b']
for cookie in cookiejar:
if cookie.name in cookieList:
cookies = cookies+cookie.name+"="+cookie.value+";";
print cookie.name+"="+cookie.value
cookie = cookies[:-1] #delete the last character
#携带认证登录
print u"携带认证登录"
url = 'http://www.immigration.govt.nz/migrant/default.htm'
request = urllib2.Request(url,headers=headers)
request.add_header("cookie",cookie)
opener = urlOpener.open(request, params)
value = opener.read().find("username")
if value & -1:
print u"登录成功"
cookies = ''
cookieList = ['ASP.NET_SessionId','ImmigrationAuth','TS0120d49b']
for cookie in cookiejar:
if cookie.name in cookieList:
cookies = cookies+cookie.name+"="+cookie.value+";";
print cookie.name+"="+cookie.value
cookie = cookies[:-1] #delete the last character
#打开提交页面,就是此处登录成功后打开这个页面失败,但是手动打开网页,单独写一个脚本,再把cookie复制进去,却可以成功打开这个页面
#请教过其他人,是说登录的时候,js生成了一个csrf_token,必须计算出这个token,才能登录成功后继续操作
print u"打开提交页面"
url = 'https://www.immigration.govt.nz/WorkingHoliday/Application/Submit.aspx?ApplicationId=1302903'
request = urllib2.Request(url)
request.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/ Firefox/38.0")
request.add_header("cookie",cookie)
request.add_header('Host','www.immigration.govt.nz')
request.add_header('Accept','text/html,application/xhtml+xml,application/q=0.9,*/*;q=0.8')
request.add_header('Accept-Language','zh-CN,q=0.8,en-US;q=0.5,q=0.3')
request.add_header('Accept-Encoding','gzip, deflate')
request.add_header('Connection','keep-alive')
opener = None
opener = urlOpener.open(request)
print opener.read().find("IMPORTANT NOTE")
if opener.read().find("IMPORTANT NOTE") == -1 :
print u"打开提交页面失败"
按赞数排序
你看到csrf_token就知道它就是用来防止进行跨站攻击的。它页面做了安全检测,应该是用Javascript等做了动态计算,从而会生成一个额外的token,防止你直接使用cookie
因为 “**但是手动打开网页,单独写一个脚本,再把cookie复制进去,却可以成功打开这个页面**”
那么可能你可以用selenium等来直接用浏览器控件加载页面,然后再设置cookie等。
这个你用fiddler仔细比照下你的程序和浏览器的有什么不同就可以了。
检查一下向服务器发送请求的时候,看看cookie里是否包含asp.net_Sessionid,可能是因为cookie的httponly设置导致的
我以前也做过类似的登录没有成功 现在直接用selenium来模拟
居然访问ASP.NET,令牌安全属性没有设置。
其他相似问题
相关参考资料&re: python实现模拟登录
你好,请问下,postdata和headers提交时应该怎么判断提交那些信息啊?不同网站除了用户名和密码外还有其他信息,如何判断提交的信息能实现模拟登陆呢?&&&&
&re: python实现模拟登录
&re: python实现模拟登录
你好,我想问一下,你的postData里面:'op' : 'dmlogin',
'f' : 'st',
'user' : '******', //你的用户名
'pass' : '******', //你的密码,密码可能是明文传输也可能是密文,如果是密文需要调用相应的加密算法加密
'rmbr' : 'true',
//特有数据,不同网站可能不同
'tmp' : '0.8195'
//特有数据,不同网站可能不同
去哪里来的呢。我在httpfox里面只能找到user和password。谢谢回复&&&&
&re: python实现模拟登录
@sunshinelyc抓包,用chrome的开发人员工具审查元素...network里&&&&
&re: python实现模拟登录
如果是验证用户名是否重复咋个实现&&&&
&re: python实现模拟登录
你好,我按照你的方法进行了模拟登录,能登录成功。但是我用burpsuit 抓包时发现没有cookie这内容。但是我开启debuglog 又在header里面发现了这个cookie。然后我又再次发送了个get请求,当却不成功&&&&
&re: python实现模拟登录
页面有checkbox的话,怎么模拟?&&&&
&re: python实现模拟登录[未登录]
可以转载么&&&&
&re: python实现模拟登录
dgrhtr&&&&
&re: python实现模拟登录
fegerh&&&&

我要回帖

更多关于 html5 登入签到页面 的文章

 

随机推荐