千呼万唤屎出来呀,百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成。这个成功以后,我打算试试百度网盘的其他接口实现。看看能不能把服务器文件上传到网盘,好歹也有几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. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第八天】(solr服务器搭建、搜索功能实现)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  2. Codeforces1303F Number of Components

    Description link 题意:给一个全\(0\)矩阵,每次支持一个修改,修改不还原(这要是还原了不就成\(A\)题了) 然后询问每一次修改完了当前矩阵的连通块个数 每一个修改的值单调不降 修 ...

  3. c++ string 的注意事项

    string 的reserve 和 resize 区别 reserve 与capacity相关,如果reserve一个比当前capacity大的 reserve 只会找到一块合适大小的内存,并将原始内 ...

  4. Git log 中文乱码

    以下三条命令搞定(系统是centos  7.4) git config --global i18n.commitencoding utf-8 git config --global i18n.logo ...

  5. 限制客户端同账号同IP多终端登录

    打开SoftEther VPN Server Manager工具,连接上节点 1.管理虚拟HUB--管理用户--双击用户--安全策略--最大多重登录数设置为1 2.管理虚拟HUB--虚拟HUB属性-- ...

  6. CentOS下图形界面安装_Orcaale 11g

    1.安装说明 使用到的工具: 软件名称 版本 软件包 系统 centOS6.8 CentOS-6.8-x86_64-bin-DVD1.iso 数据库 ORACLE11g linux.x64_11gR2 ...

  7. 深入理解Java接口

    一.接口的特点 接口中可以有变量和方法,接口中的变量会隐式的指定为public static final变量(并且只能是public static final变量),而方法会被隐式的指定为public ...

  8. HDU-1540 Tunnel Warfare(区间连续点长度)

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 Time Limit: 4000/2000 MS (Java/Others)    Memory Limi ...

  9. Super Mario HDU - 4417 (主席树询问区间比k小的个数)

    Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory ...

  10. Eclipse 热部署方式

    1.tomcat 热部署 1.1方法一:更改 server.xml,更改为 <Context docBase="dreamlive" path="/ROOT&quo ...