千呼万唤屎出来呀,百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成。这个成功以后,我打算试试百度网盘的其他接口实现。看看能不能把服务器文件上传到网盘,好歹也有几T的空间。

登录百度

先清理浏览器缓存,打开Charles,登录一次百度主页,抓取到登录过程。



本来是想改一下写作的格式,美观一些,但是想了想,还是按照分析的顺序来写,这样有利于大家了解一种分析的思路。看过上一篇新浪微博PC端模拟登陆的应该知道,首先要找到登录的请求,一般为post,地址中有login

请求找到了,参数......,太TM多了。先观察一下参数,一般无序、随机、没有什么规则的参数有可能是变化参数,其他的一般都是固定参数。当然,也可以多次登录抓包,对比一下大概也能确定。那么我们确定一下变化的参数:token、tt(时间戳)、codestring、gid、password、verifycode(验证码)、rsakey、ppui_logintime、fp_uid、fp_info、dv、traceid

参数分析

确定了需要分析的参数,从哪个开始分析呢?随意吧



一般有些参数之间是有关系的,比如token的请求参数里需要gid参数

这里我就不一一去分析参数间的关系了,直接来了啊

参数 gid

一方面其他参数需要它,另外就是这个参数是完全由本地js生成的。先看一下这个参数



搜索一下这个值,没有。那么我们再来搜一下这个name,就是gid,之前说过我们一般是找xxx=这种,先来搜一下gid=



点击loginv4_9f3632a.js,然后在JavaScript页签搜索gid=



有好几个,我圈出了这个getqrcode?请求,为啥捏?看图,我们找到这个请求



看到请求里的gid值了吗?跟我们登录的gid是一样的,那就确定是这个地方了,gid=e.guideRandom,然后在这个脚本里搜一下guideRandom



然后翻译一下这个js,这......就自己去琢磨吧

参数 token

先搜索token的值



得到请求地址:https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1520951400830&class=login&gid=E8ED064-D480-4F3E-A5CE-BCF25F8DD1E2&loginversion=v4&logintype=dialogLogin&traceid=&callback=bd__cbs__6l1agx



就剩下callback,其他的请求里也需要callback这个



搜一下bd__cbs__,为啥要搜这个?这个真的很痛苦,callback搜出来一大片,而且没看出来什么有效数据,值又搜不到,那就搜一半吧,你问我为啥?第六感,不管你信不信,反正我是信了

其实呢,有好几个请求都有这个参数callback,然后我们观察这些callback的规律,基本就是这个bd__cbs__没变,所以可以搜一下它试试,搜到两个



分析一下这段代码,基本就是c.getUniqueId这个函数了,搜一下这个函数



oj8k,找到了,代码贴下面,为什么这么写?自己查js去,当然有更简单了pyv8或者psexecjs



Token这里我要再说一下,参数我们分析完了,你以为请求就成功了吗?



Oh!yeah,之前我们都是得到所有请求参数就访问成功了



就这里卡了我好长时间。那么碰到这种情况要从那几个点着手呢,首先我想到的是cookies



然后向上去找Set Cookie的地方



访问首页得到四个cookie值,H_PS_PSSID、BIDUPSID、PSTM、BAIDUID





这里又找到一个BDORZ,首页很简单,没有什么参数,

注意看这几个参数,就在上面四个cookies中,t是时间戳,参数都搞定了,那么Token的cookies也都搞定了,终于可以成功了,图样图森破,还是不行。MMP,cookies搞定都不行,我还有招,请求头!!!浏览器里直接拷过去,看你还想咋的



然鹅....,算你狠,不过我不会轻易认输的



调试他娘的,一遍一遍又一遍,两遍三遍四五遍,各种姿势都试了,终于高潮要来了,特么的请求不一样



先上图





看到不一样了吧,为什么呢?我们在用requests库的时候,get请求我比较习惯用.get(url, params=data),参数用params的方式传入,再来看一下Token请求的参数



getapi是空,那很明显

data = {
"getapi":"",
"tpl":"mn",
....
}
session.get(url, params=data)

然后发送的请求就是/v2/api/?getapi=&tpl=mn&....,实际上正常的请求是/v2/api/?getapi&tpl=mn&...,竟然还有这种操作,我真的是第一次碰到,改一下

data = {
"tpl":"mn",
...
}
url = ".../v2/api/?getapi&{}".format(urlencode(data))
session.get(url)

到这里才算OK了,最后总结了一下,请求的那个坑、请求头中的Referer、cookies,终于可以说一句OJ8K

参数 dv

为什么要先说这个dv,首先这个我没完全破解,另外就算你用固定值,也不影响结果,这个不能详细说,否则得好几帖子,我们先搜dv=



切换到javascript页签



我们可以搜一下dv_Input这个控件,它是没有的,我就不展示了,然后应该就是window.LG_DV_ARG了

这里有dvjsinput,上图我们也看到了这个,切换到javascript页签看一下



然后打开浏览器,清空缓存,打开隐身窗口,打开开发者工具,访问百度首页



观察一下dv值的特点,可以找一些比较有特色的部分搜一下,比如tk、@,这样尽量减少我们调试js的过程,因为真的很痛苦



在console里面执行一下这个计算,跟我们dv前面的值是不是类似,那就是它了,不管你是不是我都认为是。然后再搜一下@



刚才计算的Token+@+Ue(xx),这个肯定就是dv了,至于Ue嘛,我没搞定,不过发现没啥意义,写固定值也可以,也就不用费心去找这个了。


太多了,所以这里就分割一下,剩下的下一篇再继续


如果你觉得我的文章还可以,可以关注我的微信公众号:Python爬虫实战之路

也可以扫描下面二维码,添加我的微信号

Python爬虫-百度模拟登录(一)的更多相关文章

  1. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  2. Python爬虫之模拟登录微信wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  3. Python 爬虫之模拟登录

    最近应朋友要求,帮忙爬取了小红书创作平台的数据,感觉整个过程很有意思,因此记录一下.在这之前自己没怎么爬过需要账户登录的网站数据,所以刚开始去看小红书的登录认证时一头雾水,等到一步步走下来,最终成功, ...

  4. 测试开发Python培训:模拟登录新浪微博-技术篇

    测试开发Python培训:模拟登录新浪微博-技术篇   一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...

  5. Python爬虫常用之登录(二) 浏览器模拟登录

    浏览器模拟登录的主要技术点在于: 1.如何使用python的浏览器操作工具selenium 2.简单看一下网页,找到帐号密码对应的框框,要知道python开启的浏览器如何定位到这些 一.使用selen ...

  6. Python post请求模拟登录淘宝并爬取商品列表

    一.前言 大概是一个月前就开始做淘宝的爬虫了,从最开始的用selenium用户配置到selenium模拟登录,再到这次的post请求模拟登录.一共是三篇博客,记录了我爬取淘宝网的经历.期间也有朋友向我 ...

  7. Java爬虫——人人网模拟登录

    人人网登录地址:http://www.renren.com/ 此处登录没有考虑验证码验证码. 首先对登录方法进行分析 有两种方法. 一)在Elements中分析源码 发现登录点击后的事件是http:/ ...

  8. python爬虫scrapy之登录知乎

    下面我们看看用scrapy模拟登录的基本写法: 注意:我们经常调试代码的时候基本都用chrome浏览器,但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码,误导我以为登录时不需要验证码,其实 ...

  9. Python爬虫常用之登录(一) 思想

    爬虫主要目的是获取数据,常见的数据可以直接访问网页或者抓包获取,然后再解析即可. 一些较为隐私的数据则不会让游客身份的访问者随便看到,这个时候便需要登录获取. 一般获取数据需要的是登录后的cookie ...

随机推荐

  1. C#在listview控件中显示数据库数据

    一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 ...

  2. 筛选nginx访问日志文件中的域名

    head  -n 500 1.log |awk  '{print $11}' > 1.txt     查看1.log日志文件前500行记录并打印出第11列也就是域名的那一列,并输出到1.txt文 ...

  3. 2018 ACM-ICPC 宁夏 H.Fight Against Monsters(贪心)

    It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...

  4. USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

    https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...

  5. mysql中datetime时间转字符串(避免java层映射为数字串)

    -- in_date datetime NULLDATE_FORMAT(ls.`in_date`,'%Y-%m-%d %T')AS create_time

  6. JS创建数组的三种方法

    1     常规方式 创建数组并给数组元素赋值 var myCars = new Array(); myCars[0] = "Saab"; myCars[1] = "Vo ...

  7. mysql远程导出

    D:\phpStudy\PHPTutorial\MySQL\bin>mysqldump -h192.168.1.1 -u用户名 -p密码 --default-character-set=utf8 ...

  8. 执行PHP -m报错Xdebug MUST be loaded as a Zend extension

    Xdebug扩展安装后执行PHP -m报错: <br /><b>Warning</b>: Xdebug MUST be loaded as a Zend exten ...

  9. PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册

    Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...

  10. Lua-文件操作

    简单模式和完全模式 简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作. 完全模式(complete model) 使用外部的文件句柄来实现.它 ...