当前位置: 首页 > 后端技术 > Python

Python模拟登录淘宝

时间:2023-03-26 18:50:45 Python

最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能,基本都需要登录,所以想出了一篇模拟登录淘宝的文章!网上看了很多关于模拟登录淘宝的内容,但是基本上都是用scrapy,pyppeteer,selenium等库来模拟登录的,但是我们还没有讲这些库,只讲requests库,所以我们就用requests今天图书馆模拟登陆淘宝!在说模拟登录淘宝之前,先回顾一下使用requests库模拟登录豆瓣和新浪微博的过程:这种模拟登录属于比较简单的登录,只需要上传用户名和密码即可通过请求登录成功时的验证是的,也就是说一步到位!而且淘宝登录比较复杂,为什么会复杂呢?因为淘宝登录涉及的参数很多,请求不止一次!先说淘宝登录流程,先了解流程原理,再敲代码,让大家轻松看懂!一、淘宝登录流程为了方便大家理解,朱哥画了一张不规范的淘宝登录请求时序图。、时间等信息,然后加密生成,用在很多地方,不仅仅是登录!上图是更详细的流程图。考虑到代码层面,诸葛将模拟登录淘宝分为以下四个步骤:输入用户名后,浏览器会向淘宝(taobao.com)发起post请求,判断是否出现SliderValidation!用户输入密码后,浏览器向淘宝(taobao.com)发起post请求,验证用户名和密码是否正确,如果正确则返回一个token。浏览器拿token到阿里巴巴(alibaba.com)兑换ST码!浏览器获取st码后,取st码获取cookies,登录成功。在这里,可能有同学会提出疑问:为什么淘宝(taobao.com)验证通过后会拿token去阿里巴巴(alibaba.com)兑换st码呢?羊毛布?这个以后再说吧!2.模拟登录的实现上面我们只说了大概的登录流程,这里朱哥先详细解释一下每一步的操作,然后贴出实现代码!1.判断是否需要验证码。目前,我们在登录淘宝时,大多数情况下不会出现滑块验证码。朱大哥多次尝试登录退出,中间只出现一次。它是什么?控件是否需要滑块验证码?从上图可以看出,当猪哥输入用户名时,浏览器会发起post请求,验证是否需要出现滑块验证码。如果返回true,就会出现滑块验证码!否则,不出现,一般是不会出现的!图中我们可以看到post请求上传了两个参数:username,ua!前面朱哥说ua是浏览器、ip、设备信息等多信息加密参数,所以朱哥猜测淘宝的验证码是否出现不仅是从账号的角度,还有从ip和设备的角度!例如:某台设备可能登录了大量账号。这时候淘宝可以通过ua参数获取设备号,然后对设备进行限制!知道流程、请求链接和参数后,我们就可以使用代码来请求了!2、验证用户名和密码这一步是上面时序图中的第五步:请求登录,这里会把用户名、ua参数、加密后的密码等30多个参数邮寄给淘宝(taobao.com)进行验证。让我们用代码来实现它。别被这么多参数吓倒了,都是从浏览器里抄来的!查看请求结果!可以看到applicationstcode链接后面有一个token。我们稍后会分析令牌的具体用途!3、申请st码上面我们已经申请了淘宝(taobao.com)的token,这一步就是将token换成st码。说到这里,很多人可能会有疑问:为什么登录淘宝这么麻烦?淘宝不能直接登录吗?为什么一定要先在淘宝上验证用户名和密码,然后去alibaba.com换一个st码才能登录?任何公司的框架都是缓慢演进的结果。我想最初的淘宝登录一定不会这么复杂。但是,随着阿里巴巴的逐渐壮大,很多业务线被划分了出来,但是这些业务线又是相互关联的。比如用户登录淘宝账号后,不需要再登录天猫?(注意淘宝和天猫的顶级域名不一样,所以不能共享cookie。)为了解决这个问题,出现了单点登录。单点登录(SSO),简称SSO,是目前比较流行的企业业务集成解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。——百度百科很多大公司几乎都实现了单点登录,所以阿里的单点登录系统必须由母公司阿里巴巴(alibaba.com)实现,所有子公司都调用母公司的接口!我们回过头来分析为什么淘宝登录这么复杂。很容易理解:用户数据在淘宝上,所以淘宝(taobao.com)现在需要验证用户名和密码。验证通过后生成token,浏览器拿token与阿里通信。阿里巴巴(alibaba.com)申请单点登录码(st码),阿里巴巴收到请求后会返回st码验证token,所以把token改成st码的原因是单点登录-在!了解了设计原理后,代码实现就很清晰了!4.使用st码登录成功获取st码后,我们就可以登录了,这一步是通过st码获取登录cookie。至此我们已经成功模拟登录淘宝了!5、获取淘宝昵称其实我们已经成功登录淘宝并返回了用户首页的链接。为了进一步验证登录成功,我们请求淘宝用户主页,顺便提取淘宝昵称!三、总结整体讲完了,我们来稍微总结一下,主要从代码结构和存在的问题两个方面:1、代码结构放出一个代码结构图,让大家直观的理解这就是我们之前说的模拟登录淘宝的四个步骤,不过这里我们用代码来实现!2.有问题。在写这个教程之前,朱哥也是在网上了解了一下,然后用浏览器和抓包工具(Charles)一步步练习的。最重要的是你首先要了解淘宝登录的大致流程,否则你实际操作起来会一头雾水,下面就说说目前存在的问题和存在的问题。首先,第一个问题是淘宝的滑块解锁。requests目前还没有很好的解决方案。其中一些将在后面介绍。爬虫框架之后再破解吧!朱哥试了很多次(50多次)登录退出,都没有出现滑块验证码。网上有人用代理ip,猪哥在这里没用。只要不是超级超级超级频繁爬取大量数据,一般大公司不太擅长封ip,因为有误伤的几率,对用户的影响太广。也许一个印章就是整个社区。在验证用户名和密码的第二步,上传了近30个参数。如果将用户名、ua、加密后的密码复制到验证中仍然验证不通过,可以尝试将这30个参数替换成浏览器中的参数!偶尔第三步和第四步会出错,再试一次就好了!看到这里,是不是觉得淘宝模拟登录清晰多了,有兴趣的同学可以收藏转发,周末有时间自己试试。征服淘宝登录,其他登录比较简单!源码地址:关注微信公众号“裸睡猪”,回复:模拟登录淘宝