一:前言
今天看了一篇安利Charles这个软件的文章,就拿来试试,我们大学的登录页面用开发者模式进去chrome有屏蔽相关模块,用火狐可以正常不过还是抓不到验证码这个js动态数据而且帐号密码的请求后Cookies并找不到。那么这个时候使用抓包软件就是一个好的方法之一了,之前也用过其他抓包软件,比如Fidder,今天用过Charles后才发现还有比Fidder好用的抓包软件,这个比较简洁,数据查找也很直观。
目标:使用抓包软件Charles对页面数据分析找到帐号密码以及验证码的接口,然后用Python实现模拟登录,并提取登录后的页面。
二:运行环境
Python3.6,我用的是Anaconda集成版本,方便管理各种模块。
Charles版本是4.02,使用很简单,数据显示直观。
三:实例分析
1.分析网站登录情况,网址是http://my.hlju.edu.cn/login.portal 进去之后用火狐的浏览器进去开发者模式,看到了验证码地址captchaGenerate.portal?后面跟的随机数字代表的不同的验证码,我把这个配合主网址组成这个网址 http://my.hlju.edu.cn/captchaGenerate.portal? 在浏览器打开就是随机的验证码。
2.验证码的网址已经找到了,现在我们使用Charles抓包工具,抓取登录时的数据分析一下,这一张是抓包后的图。
3.然后点击这个userPasswordValidate.portal,可知道这个保存着登录的全部数据,我们点击一下From数据就变得整洁多了,可以看到有几个键值对这样我们帐号密码对应地址也找到了,之后就可以开始用Python模拟登录了。
Login.Token1 *******
Login.Token2 *******
captcha w4dy
goto http://my.hlju.edu.cn/loginSuccess.portal
gotoOnFail http://my.hlju.edu.cn/loginFailure.portal
四:实战代码
帐号密码改成自己的学号密码即可模拟登录,之前爬虫都没有使用requests.session(),这里就需要因为用了这个回话对象,可以使几次请求都在同一个Cookie下进行,方便我们模拟登录后获取登录后的主页面。
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。
import requests
from PIL import Image
from bs4 import BeautifulSoup
url1 = 'http://my.hlju.edu.cn/captchaGenerate.portal?'
url2 = 'http://my.hlju.edu.cn/userPasswordValidate.portal'
url3 = 'http://my.hlju.edu.cn'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
}
s = requests.session()
response = s.get(url1, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
with open('img\code.jpg', 'wb') as f:
f.write(response.content)
img = Image.open('img\code.jpg')
img.show()
data = {}
data['Login.Token1'] = '帐号'
data['Login.Token2'] = '密码'
data['captcha'] = input('输入验证码:')
data['goto'] = 'http://my.hlju.edu.cn/loginSuccess.portal'
data['gotoOnFail'] = 'http://my.hlju.edu.cn/loginFailure.portal'
response2 = s.post(url=url2, data=data, headers=headers)
response3 = s.get(url3, headers=headers)
print(response3.text)
五:总结
这次练习了一下Charles抓包的使用和对抓包数据的分析,每天写一写小Demo,继续加油!
这里贴出我的github地址,我的爬虫代码和学习的基础部分都放进去了,有喜欢的朋友一起学习交流吧!github.com/rieuse/learnPython