python模拟登录的两种方法

模拟登录的两种方法

  • 一、使用表单登录的方法实现模拟登录
          • 1.1 查找提交入口
          • 1.2 查找需要提交的表单数据
          • 1.3 处理验证码(pillow扩展库)(全代码)
          • 1.4 使用POST请求方法登录
          • 1.5 使用表单登录的方法实现模拟登录(全代码)
  • 二、使用cookie登录方法实现模拟登录
        • 2.1 使用浏览器cookie登录
            • 2.1.1 获取cookie
            • 2.1.2 携带cookie发送请求(全代码)
        • 2.2 基于表单登录的cookie登录
            • 2.2.1 存储cookie
            • 2.2.2 加载cookie(全代码*基于 存储cookie 之上)

背景:在互联网中,一些网页无需登录即可访问,但有些网页需要登录才能够访问,
这里主要说明表单登录和cookie登录两种模拟登录的方法。


一、使用表单登录的方法实现模拟登录

表单登录是指通过编写程序模拟浏览器像服务器端发送POST请求,提交登录需要的表单数据,获得服务器端的认可,返回需要的结果,从而实现模拟登录。

1.1 查找提交入口

提交入口指的是登录网页的表单数据(用户名,密码等)的真实提交地址
在网址的登录页面,F12,打开网络NETwork面板,勾选“Preserve log”,F5刷新页面,登录页面账号密码验证码等进入成功登录页面,在网络NETwork面板里找到"login.jspx"资源包单击,在里面的Headers标签下的General信息中,可以看到请求方法为POST,可以找到,requests url的网址为 提交入口,保存下来留着接下来用,其次

1.2 查找需要提交的表单数据

还是在上面的资源包中的 From Data信息中,可以看到我们登录的账号密码等信息,也需要留下来备用

1.3 处理验证码(pillow扩展库)(全代码)

验证码的目的是区分正常人和机器的操作,他是表单登录的障碍,所以要必须获取他,要获取必须选识别他,需要获取验证码的地址,在刚才的面板中找的“captcha.svl”资源并单击,如果其中的Preview标签显示了验证码,则Headers标签下的url地址就是验证码的地址。获取验证码的地址后,下一步需要对验证码地址发送请求,然后将验证码图片下载到本地,最后人工打开图片识别验证码。
扩展库PIL(pillow库)的Image模块可以自动调用本机的图片查看程序打开验证码图片:
Image.open(fp,mode=‘r’)
Image.show(title=None,command=None)

方法 参数名称 说明
open fp 接受str。 表示图片路径地址。无默认值
show title 接受str。 表示图片标题。默认为None

用法:

import requests #导入requests库
from PIL import Image #导入PIL库的Image模块
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'} #请求头
captcha_url='http://***********' #验证码地址
r=requests.get(captcha_url,headers=headers) #向验证码地址发起请求

#将图片保存到本地
with open('./位置/取个名字','wb') as f:
	f.write(r.content)
#创建Image对象
im=Image.open('./位置/取个名字')
#调用本机图片查看程序打开图片
im.show()

captcha=input('请输入入验证码:')
print('获取的验证码为:',captcha)
1.4 使用POST请求方法登录

POST请求方法能够保障用户端用户端提交数据的安全性,因此他被一般需要登录的网站所采用,Requests库的post函数能够以POST请求方法向服务器客户端发送请求,他会返回一个Respose对象。post语法格式如下:
requests.post(url,data=None,json=None,**kwargs)

参数 说明
url 接受str。表示提交入口。无默认值
data 接受dict。表示需要提交的表单数据。无默认值

用法:

import requests 
login_data={'username':***,'password':***·····} #本为举例,具体根据"login.jspx"资源的内容
# 发送请求
r=requests.post('登录页面的网址',data=login_data)
print('发送请求后返回的状态码:',r.status_code)  

发送请求的客户端与POST请求的必须是同一个,cookie可用于服务器识别客户端,发送请求的客户端有同样的cookie时,可认定客户端是同一个。requests库的会话对象Session能够跨请求的保持某些参数。

用法:

import requests 
login_data={'username':***,'password':***·····} #本为举例,具体根据"login.jspx"资源的内容

s=requests.Session()
r=s.post('登录页面的网址',data=login_data)

print('发送请求返回的状态码:',r.status_code)
1.5 使用表单登录的方法实现模拟登录(全代码)

怎么判断模拟登陆是否登录成功,则判断发送请求之后获取的url地址是否为登录之后的网址地址,如果是则登陆成功,不是则登陆失败。

import requests
from PIL import Image
s=requests.Session()
login_url='登录页面的网址'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'} 

def get_captcha():
	captcha_url="验证码的网址"
	r=s.get(captcha_url,headers=headers)  #向验证码发送请求,获取图片
	with open('./位置/取个名字','wb') as f:   #将图片保存到本地
	f.write(r.content)
	
	im=Image.open('./位置/取个名字') #创建Image对象
	im.show() #调用本机图片查看程序打开图片

	captcha=input('请输入入验证码:')
	return captcha
login_data={'username':***,'password':***·····,'captch':get_captcha()}  #构建需要提交的表单数据
r=s.post(login_url,data=login_data,headers=headers)  #提交表单数据,使用POST请求方法向提交入口发送请求
#测试是否成功登录
print('发送请求后返回的网址:',r.url)  #网址变了则成功登录进去 

二、使用cookie登录方法实现模拟登录

2.1 使用浏览器cookie登录

服务端使用cookie来区分不同的客户端,cookie成为服务器识别客户端身份,保存客户端信息的重要工具。
特别注意的是,cookie具有时效性,失效的cookie会导致登陆失败。如果客户端退出登录,也会导致登陆失败。

2.1.1 获取cookie

登录页面输入账号密码等 登录进去,F12,再F5刷新页面找到“index.html”资源,headers标签下 可以找到cookie信息。

2.1.2 携带cookie发送请求(全代码)

使用Requests库的get函数设置发送请求携带cookie的参数是cookies,他接收dict或者cookiejar。从浏览器获取的cookie为str类型,需要处理为dict类型。

import requests
login_url='登录页面的网址'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'} 

cookie_str='获取的cookie信息'  #cookie 必须为最新登录进去产生的cookie
cookies={}
for line in cookie_str.split(';'):
	key,value=line.split('=',1)
	cookie[key]=value

#携带cookie发送请求
r=requests.get(login_url,cookies=cookies,headers=headers)
#测试是否成功登录
print('发送请求后返回的网址:',r.url)

2.2 基于表单登录的cookie登录

实现第一次表单登录后,可以将cookie保存下来以便下次直接使用,表单登录后的cookie无需处理。此外,cookie失效后再次进行表单登录即可获取最新的cookie。
基于表单登录的cookie登录,首先需要存储首次登录后的cookie,然后加载已保存的cookie

2.2.1 存储cookie
import requests
from http import cookiejar
s=requests.Session()
#创建LWPCookieJar对象,若cookie不存在,则建立cookie文件,命名为cookie
s.cookies=cookiejar.LWPCookieJar('cookie')

login_url='登录页面的网址'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'} 

def get_captcha():
	captcha_url="验证码的网址"
	r=s.get(captcha_url,headers=headers)  #向验证码发送请求,获取图片
	with open('./位置/取个名字','wb') as f:   #将图片保存到本地
	f.write(r.content)
	
	im=Image.open('./位置/取个名字') #创建Image对象
	im.show() #调用本机图片查看程序打开图片

	captcha=input('请输入入验证码:')
	return captcha
login_data={'username':***,'password':***·····,'captch':get_captcha()}  #构建需要提交的表单数据
r=s.post(login_url,data=login_data,headers=headers)  #提交表单数据,使用POST请求方法向提交入口发送请求
#测试是否成功登录
print('发送请求后返回的网址:',r.url)  #网址变了则成功登录进去

#保存cookie
s.cookies.save(ignore_discard=True,ignore_expries=True)
2.2.2 加载cookie(全代码*基于 存储cookie 之上)

LWPCookieJar对象load方法用于加载cookie,基本语法格式如下:
__http.cookiejar.LWPCookieJar.load(filename=None,ignore_discard=False,ignore_expires=False)
load方法常用参数及其说明

参数 说明
filename 接收str。表示需要加载的cookie文件名。
ignore_discard 接收bool。表示即使cookie不存在,也要加载。默认为False
ignore_expires 接收bool。表示覆盖原有的cookie。默认为False
#判断保存的cookie文件是否存在,存在则加载
try:
	s.cookies.load(ignore_discard=True)
export:
	print('cookie 未能加载!')

#携带cookie提交请求
r=s.get(login_url,headers=headers)

#测试是否成功登录
print('发送请求后返回的网址为:',r.url)

你可能感兴趣的:(python,cookie,http)