Python模拟登陆(urllib2)

欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/49888757

最近需要做个自动化工具,需要自动登录某个网站然后自动进行某些操作,免除人工一个一个操作的烦恼。
第一步就是要登录网站,而目前主流网站的登陆过程大同小异。于是乎,我就拿了人人网(www.renren.com)来试手。至于为什么用它,因为很多网站的登陆过程太复杂了,它稍微简单点。

主要用python实现了对网站的模拟登录。需要自己构造数据接口,这就需要抓包看登陆的时候到底发了什么数据。
firefox有一个很好用的工具HTTPfox来抓取http数据包,主要看url,postdata,header,cookie,user-agent等数据。

我们要构造自己的HTTP数据包,并发送给指定url。我们通过urllib2等几个模块提供的API来实现request请求的发送和相应的接收。
大部分网站登录时需要携带cookie,所以我们还必须设置cookie处理器来保证cookie。


#!/usr/bin/python 
# -*- coding:utf-8 -*-

import urllib
import urllib2
import cookielib

#登录的主页面
hosturl = 'http://www.renren.com/'

#post数据接收和处理的页面,点登陆的时候http POST的链接
posturl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20151021027896'

#设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
  
#打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
h = urllib2.urlopen(hosturl)
  
#构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。
headers = {
			'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
			'Referer' : 'http://www.renren.com/'
		   }

#抓包获取参数,password一般会通过某种方式加密。
postData = {
	'email':'xxxxxx',
	'icode':'',
	'origURL':'http://www.renren.com/home',
	'domain':'renren.com',
	'key_id':1,
	'captcha_type':'web_login',
	'password':'xxxxxx',
	'rkey':'70153f87e588d34f588cccecdd878d66',
	'f':''
	} 

postData = urllib.urlencode(postData)

#通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程  
request = urllib2.Request(posturl, postData, headers)

print request
response = urllib2.urlopen(request)
text = response.read()
text = text.replace("true","1").replace("false","0")
text = eval(text)
url = text.get('homeUrl')  # 这个才是你人人主页的真实url
if not url:
	print "error"

response = urllib2.urlopen(url)

result = response.read().decode("utf-8").encode("gbk")
print result


注:
1.登陆一般都会先有一个http GET。用于拉取一些信息及获得Cookie,然后再http POST登陆。
2.http POST登陆的链接有可能是动态的,从GET返回的信息中获取。
3.PASSWORD有些是明文发送,有些是加密后发送,腾讯的更牛逼,动态加密的,里面有很多其他数据的加密信息,不只是密码。不过好像能通过查看JS源码获得加密算法。
4.大多数网站的登陆整体流程类似,可能有些细节不一样。所以不能保证其他网站登陆成功,还有待研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章