如何用python实现网页自动登录

Python021

如何用python实现网页自动登录,第1张

以登陆百度为例子,如下:

import urllib,urllib2,httplib,cookielib

def auto_login_hi(url,name,pwd):

url_hi="http://passport.baidu.com/?login"

#设置cookie

cookie=cookielib.CookieJar()

cj=urllib2.HTTPCookieProcessor(cookie)

#设置登录参数

postdata=urllib.urlencode({'username':name,'password':pwd})

#生成请求

request=urllib2.Request(url_hi,postdata)

#登录百度

opener=urllib2.build_opener(request,cj)

f=opener.open(request)

print f

#打开百度HI空间页面

hi_html=opener.open(url)

return hi_html

if __name__=='__main__':

name='name'

password='password'

url='yoururl'#例如:url='http://hi.baidu.com/cdkey51'

h=auto_login_hi(url,name,password)

print h.read()#h里面的内容便是登录后的页面内容

前言

有些登录不是用cookie来验证的,是用token参数来判断是否登录。

token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已;另外一种是在url请求参数里,这种更直观。

一、登录返回token

1.如下图的这个登录,无cookies

2.但是登录成功后有返回token

二、请求头带token

1.登录成功后继续操作其它页面,发现post请求的请求头,都会带token参数

2.这种请求其实比cookie更简单,直接把登录后的token放到头部就行

三、token关联

1.用脚本实现登录,获取token参数,获取后传参到请求头就可以了

2.如果登录有验证码,前面的脚本登录步骤就省略了,自己手动登录后获取token

import requests

header = { # 登录抓包获取的头部

"User-Agent": "Mozilla/5.0 (Windows NT 10.0WOW64rv:44.0) Gecko/20100101 Firefox/44.0",

"Accept": " / ",

"Accept-Language": "zh-CN,zhq=0.8,en-USq=0.5,enq=0.3",

"Accept-Encoding": "gzip, deflate",

"Content-Type": "application/x-www-form-urlencodedcharset=UTF-8",

"X-Requested-With": "XMLHttpRequest",

"Content-Length": "423",

"Connection": "keep-alive"

}

body = {"key1": "value1",

"key2": "value2"} # 这里账号密码就是抓包的数据

s = requests.session()

login_url = " http://xxx.login " # 自己找带token网址

login_ret = s.post(login_url, headers=header, data=body)

token = login_ret.json()["token"]

post_url = " http://xxx "

header["token"] = token

header["Content-Length"]="9"

body1 = {

"key": "value"

}

post_ret = s.post(post_url, headers=header, data=body1)

print post_ret.content

方法一:Python

1、

@damon wang

说的,学会用 Chrome / FF 的开发者工具。其中关键的是:查找元素,以及观察网络通信。

2、用 Python 的 Requests(或者 urllib2,但 Requests 简单不少)去模拟在 Chrome 中观察到的登陆行为。

方法二:Python + Selenium

@木卫十二

提到的 Selenium 是一种方法,问题在于跑这些脚本时候会自动驱动一个浏览器,比单纯用 Python 实现要笨重一些。Splinter 是一个相对简单一点的操作 Selenium 的 Python 库。