本文已参加「新人创造礼」活动, 一同开启掘金创造之路。
哈哈,本来想跟一篇谷歌介绍,想到内容较多一直没事搞,今日提上日程这周跟上,先来一篇模拟登录把,也是比较经典的案例,直奔主题,网站地址
1.老一套先清cookies再抓包
- 先做恳求获取cookies和token
sess.headers = {
'authority': 'webvpn.cams.cn',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language': 'zh-CN,zh;q=0.9',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"', #
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
}
res = sess.get('https://webvpn.cams.cn/users/sign_in')
res = etree.HTML(res.text)
token = res.xpath("//meta[@name='csrf-token']/@content")[0]
- 再获取验证码+ocr识别
res = sess.get('https://webvpn.cams.cn/rucaptcha/')
with open('ValidCodeImg.jpg', 'wb') as w: # 保存图片
w.write(res.content)
with open('ValidCodeImg.jpg', 'rb') as r:
img = r.read()
ocr = ddddocr.DdddOcr()
code = ocr.classification(img_bytes=img)
print(code,flush=True)
- ok,现在是要啥有啥了,直接拼参恳求
data = {
'utf8': '✓',
'authenticity_token': '{}'.format(token),
'user[login]': f'{账号}',
'user[password]': f'{密码}',
'user[dymatice_code]': 'unknown',
'user[otp_with_capcha]': 'false',
'_rucaptcha': '{}'.format(code),
'commit': '登录 Login',
}
res = sess.post('https://webvpn.cams.cn/users/sign_in', data=data)
start = res.status_code
- 走两步