爬虫系列之巧爬Boss某聘,还在为__zp_stoken__参数发愁吗?

声明:该文章仅用于学习,不得用于商业用途,如有问题,请联系作者删除!

前言:相信大家在爬boss网页版的时候都有遇到被zp_stoken这个参数恶心到的情况。下面介绍的这种爬取方式,不用解密任何加密字段只需更换代理ip即可轻松爬取你想要的信息。

先跟大家介绍爬虫几种常见的爬取方式:

  1. 网页端
  2. APP端
  3. 分享页面(较少)
  4. 小程序端

前三种这里不做介绍,大家容易忽略的是第四种,小程序端。目前基本很多大厂和中小型公司在打造app的同时都会有自己的小程序,由于小程序也只是最近几年才发展起来的,所以在各项反爬上较APP或网页会简单。这次的Boss也是如此。

抓包

image.png

这里为啥没截结果呢。。。因为IP被封了。。。就不放出来打脸了。
大家可以看到除了一个mpt看上去是个加密参数,其他都是能直接复制粘贴的东西。

mpt参数是啥

首先给出个结论,这参数是个认证参数,在经过几千次测试后,参数不会改变。

  • 那么想要知道这参数是啥,就得逆向小程序包了,小程序的包如何去抓,可以看我之前发的 2020年最新反编译任何微信小程序,以及独立分包、插件的处理方式
    这里我直接贴上相关源码:
getCodeData: function() {
        var e = this;
        return new Promise(function(t, a) {
            wx.login({
                success: function(a) {
                    var o = a.code;
                    (0, i.WX_LOGIN)(o).then(function(a) {
                        var i = a.zpData, 
                        o = (i.wt, i.mpt), 
                        s = i.openId;
                        c.data.mpt = i.mpt, c.data.openId = i.openId || "", e.checkAuth().then(function() {
                            (0, r.triggerEvents)("wxReady");
                        });
                        var u = wx.getStorageSync("LOGIN_DATA") || {}, d = (0, n.default)({}, u, {
                            mpt: o,
                            openId: s
                        });
                        d.wt ? (e.afterLogin((0, n.default)({}, d)), e.checkComplete(!0)) : c.logout(), 
                        t(c.data);
                    });
                }
            });
        });
    },
  • c.data.mpt = i.mpt 这里就是给mpt这个参数赋值的地方,我们还可以看到一个wx.login()方法,如果你开发过小程序,对这个方法就再熟悉不过了,小白跳至 wx.login官方文档,猜测该方法不能直接从小程序包里得出,而是微信自身的一个接口,如果想知道该方法做了什么,只有通过逆向微信APP来完成,大佬希望可以私聊我交流下。下面就是调用的后返回的结果:
    image.png
  • code值得出后,你会发现这个code值并不是mpt的值,所以这里面肯定还存在一些处理的逻辑。我们回到抓包


    image.png
  • 刚进入小程序,会进行该请求然后返回一个含有mpt的数据,这个请求含有几个参数一个code,还有一个appId,appId写死即可,下面就是code,这个code即是我们通过wx.login()方法返回的那个code的值。

若mpt参数失效怎么办

  • 在测试过程中,没有遇到mpt最后失效的情况。但如果真的会失效,在没有逆向APP基础的情况下,也是有办法的。

在失效后使用airtest进行模拟操作,再通过mitmdump进行中间人拦截从而获取mpt的值即可。

另外还是强调一点:使用代理IP

如有错误或不足的地方,希望各位大佬提醒更正!

你可能感兴趣的:(爬虫系列之巧爬Boss某聘,还在为__zp_stoken__参数发愁吗?)