python模拟登陆

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

1. 查找提交入口

提交入口指的是登录网页的表单数据如用户名、密码、验证码等的真实提交地址,它不一定是登录网页的地址,因为出于安全需要它可能会被设计成其他地址。找到表单数据的提交入口是表单登录的前提。

打开网站,单击右上角登录链接,进入登录网页,如图所示。


打开Chrome开发者工具后打开网络面板,勾选Preserve log(保持日志)。按“F5”键刷新网页显示各项资源,如图所示。


在登录网页输入账号、秘密、验证码,单击“登录”按钮,提交表单数据,此时Chrome开发者工具会加载新的资源。

观察Chrome开发者工具左侧的资源,找到“login.jspx”资源并单击,观察右侧的Headers标签下的General信息,如下图所示,发现Request Method信息为POST,即请求方法为POST,可以判断Request URL信息即为提交入口。

2. 查找并获取需要提交的表单数据

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

使用Chrome开发者工具获取到的提交入口,观察Headers标签,Form Data信息为服务器端接收到的表单数据,如图 5-4所示。其中,username表示账号;password表示密码;captcha表示验证码;returnUrl表示跳转网址。returnUrl系自动生成,在登录网页时无需输入。

2.2 处理验证码

  • 识别验证码。人工识别验证码分为3个步骤:①获取生成验证码的图片地址;②将验证码图片下载到本地;③人工识别验证码。
    获取登录网页验证码地址的步骤如下。
  • 打开网站,进入登录网页,若已登录需先退出。打开Chrome开发者工具后打开网络面板,按“F5”键刷新网页。
  • 观察Chrome开发者工具左侧的资源,找到“captcha.svl”资源并单击,观察右侧的Preview标签,若显示验证码图片如左图所示,则“captcha.svl”资源的Request URL信息为验证码图片的地址,如右图所示。
  • 获取验证码图片地址后,下一步对图片地址发送请求,将图片下载到本地,最后人工打开图片识别验证码。
  • 代理IP跳过验证码。很多时候在登录后爬取过程中也会弹出验证码,当使用同一个IP长时间高频率爬取网页时,该网站的服务器可能会判定该IP在爬取数据,触发网站的安全机制,在客户端弹出验证码,只有输入验证码后,客户端的访问请求才能继续被接受和处理,下图是爬取淘宝时弹出验证码的情况。

每次输入验证码会比较麻烦,效率低下。而且当网站服务器多次对指定IP弹出验证码后,可能会封禁该IP,导致爬取无法进行。因此,使用代理IP的方法,使用多个IP切换跳过验证码,成为应对反爬虫的主要手段。
获取代理IP

  1. VPN:是Virtual Private Network的简称,指专用虚拟网络。国内外很多厂商都提供VPN服务,可自动更换IP,实时性高,速度快,但价格较高,适合商用。
  2. IP代理池:指大量IP地址集。国内外很多厂商将IP做成代理池,提供API接口,允许用户使用程序调用,但价格也较高。
  3. ADSL宽带拨号:是一种宽带上网方式。特点是断开重连会更换IP,爬虫使用这个原理更换IP,但效率低,实时性差。

使用POST请求方法登录

POST请求方法能够保障用户端提交数据的安全性,因此它被一般需要登录的网站采用。Requests库的post函数能够以POST请求方法向服务器端发送请求,它返回一个Response 对象。post函数的基本语法格式如下。

requests.post(url, data=None, json=None, **kwargs) 

post函数常用的参数及其说明,如表所示。

Cookie用于服务器端识别客户端,当发送请求的客户端享有同样的Cookie时,即可认定客户端是同一个。Requests库的会话对象Session能够跨请求地保持某些参数,比如Cookie,它令发送请求的客户端享有相同的Cookie,保证表单数据的匹配。以POST请求方法为例,通过Session发送请求的基本语法格式如下。

s = requests.Session()
s.post(url, data=None, json=None, **kwargs)

使用浏览器Cookie登录

1.获取Cookie

获取Cookie分以下两步进行。

  1. 登录网站。输入账号、密码、验证码,保证成功登录网站。
  2. 找到登录成功后返回的页面地址的Cookie。步骤如下。
  3. 打开Chrome开发者工具后打开网络面板,按“F5”键刷新网页,出现资源。找到左侧的“index.html”资源,它代表的是本网页地址,可以看到Request URL信息与本网页地址相吻合,如图所示。

观察右侧Headers标签,查看Request Headers信息,找到Cookie信息,它即为登录成功后的Cookie,将其保存下来,如图所示。

2.携带Cookie发送请求

设置发送请求时携带Cookie的参数是cookies,它接收dict或CookieJar。从浏览器获取的Cookie为str类型,需要处理成dict。以GET请求方法为例,携带Cookie发送请求的基本语法格式如下。

requests.get(url, cookies, **kwargs)

基于表单登录的Cookie登录

1. 存储Cookie

存储和加载Cookie需要用到http库的cookiejar模块,它提供可存储Cookie的对象。cookiejar模块下的FileCookieJar用于将Cookie保存到本地磁盘和从本地磁盘加载Cookie文件,LWPCookieJar是FileCookieJar的子类。LWPCookieJar对象存储和加载的Cookie文件格式为Set-Cookie3,是比较常用的一种,也是本小节需要用的。创建LWPCookieJar对象的函数是LWPCookieJar,其基本语法格式如下。

http.cookiejar.LWPCookieJar(filename,delayload = None

LWPCookieJar函数的常用的参数及其说明,如下表所示。

LWPCookieJar对象的save方法用于保存Cookie,其基本语法格式如下。

http.cookiejar.LWPCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False)

save方法常用的参数及其说明,如下表所示。

2. 加载Cookie

LWPCookieJar对象的load方法用于加载Cookie,其基本语法格式如下。

http.cookiejar.LWPCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False)

load方法常用的参数及其说明,如下表所示。

  • 模拟登录主要有两种方法,即表单登录和Cookie登录。其中Cookie登录又分为使用浏览器Cookie登录和基于表单登录后的Cookie登录。
  • 表单登录的基本流程为查找提交入口、查找并获取需要提交的表单数据、使用POST方法请求登录。在实际应用中,获取需要提交的表单数据会是重点,因为各个网站需要提交的表单数据不一样,获取的难度也不一样,但大致的流程不变。
  • Cookie登录的基本流程为保存已经成功登录的Cookie、使用保存的Cookie发送请求。
  • PayPal
  • AliPay
  • WeChatPay
  • QQPay
Donate

评论