最近在做一个某宝二维码扫码的项目,一般第一个会想到的就是用selenium模拟人操作,实现扫码登录,但是因为selenium运行起来太慢,我就暂时放弃了用selenium模拟登录,宁辟蹊径,我想用requests来实现模拟扫码登陆,
说一下思路:
第一: 打开某宝登录页首先看到是二维码登录页面,我用的是谷歌浏览器,是首先我们要找到需要 用来扫描的二维码图片地址,分析发现二维码图片连接就是这个样子 https://img.alicdn.com/tfscom/TB1JgJyweOSBuNjy0Fdwu2DnVXa.png,
其中:TB1JgJyweOSBuNjy0Fdwu2DnVXa.png,这一部分是一直变化的,每一张图片这个部分都不一样,要想模拟登录,这部分要先获取,(哈哈哈,先定一个小目标),找寻了一会发现在登录首页里面发现了一些希望,
#定义一个类
class T(object):
def __init__(self):
self.s = requests.Session()
def status_code(self):
url = 'https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F'
headers_ = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.19 Safari/537.36'
}
res = self.s.get(url, headers=headers_).text
u = re.findall(r'getQRCodeURL: "(.*?)"', res, re.S)[0]
return u
调用这个会响应会返回一个json数据,里面就有上文提到的,TB1JgJyweOSBuNjy0Fdwu2DnVXa.png,还有一个lgtoken字段这个下面会用到。到这里恭喜你二维码图片链接找到了,那么我们就来模拟请求这个链接然后快乐的保存二维码吧(二维码保存下来后,方便用手机扫码)下面接着写上我的代码
#这个是用来保存二维码的
def rq_login(self):
us = self.status_code()
url = '{}'.format(us)
headers = {
'referer': 'https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.19 Safari/537.36'
}
res = self.s.get(url, headers=headers).json()
print(res)
rq_img = 'http:' + res.get('url')
lgToken = res.get('lgToken')
img_res = self.s.get(rq_img, headers=headers).content
with open('img.png', 'wb')as f:
f.write(img_res)
到这里我们第一个小目标实现了,二维码保存本地成功,今天先写到这,未完待续
网友评论