专栏首页python爬虫实战之路Python爬虫-百度模拟登录(二)

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

接上一篇的继续

参数 codestring

codestring

jxG9506c1811b44e2fd0220153643013f7e6b1898075a047bbd

套路我相信很多人已经掌握了,先在Charles中搜索值

参数值都看到了,token、tt、dv、callback这些变化的参数我们都知道了吧,其他的参数固定,别问我为什么。这个logincheck注意到了吗?是不是有人能想起前面的?不能放在字典里赋空值,要直接写在url后面,好了轻松搞定codestring。

参数 verifycode

verifycode

又把

验证码就不用全量搜索了,图片嘛,浏览一下图片请求就知道了

参数是codestring不用我提醒了吧,请求一下手动输入哦,有的人问为什么不搞自动识别的,其实没有必要,现在打码平台很便宜,而且大部分验证码都可以搞定,如果自己去搞得话,太费时间识别率还低,所以我这里就不说验证码这个了,如果有时间以后单独写一篇吧。

参数 traceid

traceid

EA43E001

老套路先搜索值,没搜到!!!,换name试试

搜了很多发现都是这个createTraceID函数创建的

都找到了,自己翻译一下吧

参数 ppui_logintime

ppui_logintime

19863

又是个时间,直接搜name吧

只搜到这一个,然后搜一下timespan

当前时间减去一个初始时间,这是一个时间段,应该是从某次请求开始到某次请求结束,对于这种我们捏造一个吧,没必要那么精确,看一下大概的时间,取15000~30000吧

参数 rsakey

rsakey

3kUWNJ6tggVCigi7EoQZcsuKpBcDKPKj

搜一下值

需要的参数不说了哦,这回看看返回值,pubkey、key,这个key的值就是我们的rsakey,pubkey我们后面会用到,先记下

fp_info&fp_uid

fp_uid

19ec2fa82bec175d9628b81d9683e9d2

fp_info

0245fc9782abae99a665854526e19a19002~~nIpK32ZQH2fI2i_lnn9ypKA34B...

这两个参数放在一起说,注意fp_uid和fp_info前面的是一样的,从002~~开始不一样了

先搜了fp_uid,发现是获取cookie的,又没有搜到set cookie的地方,那么有可能是通过本地生成的,对于本地生成的,其实最简单就是固定值,我也是使用固定值试了试,没有问题,当然是调试了一番以后才这么做的,因为调试太麻烦了。再搜一下fp_info看看吧

这个就可能性比较大了,开始调试了,打开chrome->隐身模式->清理缓存->打开百度首页->点击一下登录按钮,找到刚才的js文件,搜~~~

然后再清理缓存,重新刷新百度首页,点击登录按钮

打印一下n和t的值

开始调试,进入到这个函数以后,我们看到这里有几个函数d.genGUID,打印一下看看

是不是有点fp_uid的样子了,那就它了,这是哪个函数呢,很简单,打印一下

翻译成python或者用python执行js脚本的方式都行,fp_uid干掉了吧,fp_info后半部分太麻烦了,有谁搞定了麻烦告诉我一声。我这里就用固定值了。

参数password

password

ai2s9z7UUf9XFguwg6EUslu607/CNrit0B3c4mGF/VzEIjc+SkFM7kuSRx2LWkTAk0lecetCIQcpZ9xKtXdKy3NG7aJfkFbWxMFqCNtM3birZbkgQw6l7UKGYpeuIDAn0ae/52nU4HkcSmPAL8iGV7hQP9CxoWYpL59r8Vq8dug=

搜一下password=

断点打好了就开始调试吧,完犊子了今天死活调试不到断点处了,其实这个比较明显的,当然如果你对rsa加密不了解或者了解的不多那就不容易了,首先想想我们前面获取的pubkey的值,-----BEGIN PUBLIC KEY-----......-----END PUBLIC KEY-----\n,我先贴一下代码吧

    def encript_password(self, password, pubkey):
        pub = rsa.PublicKey.load_pkcs1_openssl_pem(pubkey.encode('utf-8'))
        encript_passwd = rsa.encrypt(password.encode('utf-8'), pub)        return base64.b64encode(encript_passwd).decode('utf-8')

看一下这个load_pkcs1_openssl_pem函数

    def load_pkcs1_openssl_pem(cls, keyfile):
        """Loads a PKCS#1.5 PEM-encoded public key file from OpenSSL.

        These files can be recognised in that they start with BEGIN PUBLIC KEY
        rather than BEGIN RSA PUBLIC KEY.

        The contents of the file before the "-----BEGIN PUBLIC KEY-----" and
        after the "-----END PUBLIC KEY-----" lines is ignored.

        :param keyfile: contents of a PEM-encoded file that contains the public
            key, from OpenSSL.
        :return: a PublicKey object
        """

        der = rsa.pem.load_pem(keyfile, 'PUBLIC KEY')        return cls.load_pkcs1_openssl_der(der)

如果js可以调试进去_SBCtoDBC,你就会发现它对BEGIN和END的处理,那实际上它就是在做rsa加密,所以说如果你了解rsa的这种加密方式,看到BEGIN PUBLIC KEY和END PUBLIC KEY的时候就马上能猜出来了,所以加密函数已经给你了,pubkey获取了,password你自己知道,那这个也搞定了。

至此,登录参数都搞定了,我们可以向下进行了

请求的url和参数都在登录的返回值里,解析一下https://www.baidu.com/cache/user/html/v3Jump.html?err_no=0&callback=parent.bd__pcbs__psvho&codeString=&userName=wuqing198985&phoneNumber=&mail=&hao123Param=RmxaRU5VTVcxTVNWcDFiMDlEU3psMWFVeGtaa2c0TldOSk0yVk1WVFV0WWxCcmVuUmxWSEl0VWpsaVl6bGhRVUZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUNzdWQwS2QzVnhhVzVuTVRrNE9UZzFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIM2dwMXA5NEtkYVJG&u=https://www.baidu.com/&tpl=mn&secstate=&gotourl=&authtoken=&loginproxy=&resetpwd=&vcodetype=&lstr=&ltoken=&bckv=1&bcsync=KnqkeCS8J7B9vuKnaRltPTrp9Kl0hPsH6votXG00OmsypOV8lYboSn7pxuyb%2F1l8XUlp9M0v0gIKoL9og3nXmZYFaGCcMO%2Fx4roGpF7SFA0cqXGlnhwGeBmIY5cVxgeM6aJ2RjPXp3fb6q41WjTiipEvOXCvcfuW7XLemxoEv%2F2ribszd6n7ql7aO7l850fOFqzBiZGeBNu3D0OZFnJeSsOHMEquD6Ahw9dbRl9ahaaRSEMDxQtrn36Bj2jayIY88OTyu7CWjtApT2eZ2SfAjBhr3IzHbnbSPhtoL82nsH7WwqHGeqq3uxYDdqH7ZkgjE3JlQV9SDQCPTnfpPxIrYg%3D%3D&bcchecksum=2590966377&code=&bdToken=&realnameswitch=&setpwdswitch=&bctime=1520951421&bdstoken=&authsid=&jumpset=&appealurl=&realnameverifyemail=0&traceid=&realnameauthsid=&accounts= 请求完以后,返回值里没有什么明显的有用值,那我就直接访问了一下首页

我们怎么判定登录成功呢,一般就是获取有用户名的页面,然后获取一下用户名,看是否存在,如果有那么就登录成功了。很幸运访问首页后登录成功了。百度模拟登录到这里就结束了。之前微博模拟登录的时候,访问一个页面,返回值里是下一个页面链接,再访问再返回下一个。我们在处理这种的时候呢,我们要怎么处理呢?

逆向推理:首先找我们需要的目标点,比如一开始我就找登录请求,然后看登录请求里面需要哪些参数,然后再一步步分析这些参数的来源,其实就是逆向推,另外登录请求完成后,再找一个目标点,就是已登录的页面,如果没有成功,就从登录往下看。基本就是这么一个思路。


最后要再说一下,写这个的目的并不是为了什么项目之类的,就是学习,练习一下,所以大家就不要吹毛求疵了,而且我也不接受吐槽。有意见可以提,反正我也不改^_^

文章分享自微信公众号:
python爬虫实战之路

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:星星在线
原始发表时间:2018-05-12
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Python爬虫-百度模拟登录(一)

    百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成。这个成功以后,我打算试试百度网盘的其他接口实现。看看能不能把服务器文...

    星星在线
  • Python3爬虫模拟登录爬取百度图片

    pycharm,python3.7,selenium库,request库,os文件库,re模块的正则表达式运用,自行下载chromedriver自测软件

    HcodeBlogger
  • 爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

    龙哥
  • 从零开始系统化的学习写Python爬虫

    主要是记录一下自己写Python爬虫的经过与心得。 同时也是为了分享一下如何能更高效率的学习写爬虫。 IDE:Vscode Python版本: 3.6

    HACK学习
  • 「Python爬虫系列讲解」十一、基于登录分析的 Selenium 微博爬虫

    前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式...

    荣仔_最靓的仔
  • 爬虫学习

    Python爬虫入门五之URLError异常处理: https://cuiqingcai.com/961.html

    菲宇
  • Python爬虫之模拟登录wechat

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

    Python数据科学
  • python爬虫scrapy模拟登录demo

    背景:初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML、json数据,但是忽略了很多的一个问题,有很多的网站为了反爬虫,除了需要高可用...

    公众号---人生代码
  • 反爬虫和反反爬虫(上篇)

    公众号爬取今日头条的那一期,不少小伙伴反应爬取下来的图片无法查看或者爬取不了,小詹也重新试了下,的确是的,写那篇推文的时候,头条还比较友好,没有添加反爬措施,大...

    小小詹同学

扫码关注腾讯云开发者

领取腾讯云代金券