教你使用python爬虫-携程-eleven参数!

·  阅读 161

携程-eleven分析

一、eleven的位置

![](https://p9-tt-ipv6.byteimg.com/large/pgc-image/02d9df39aad84eaea2fbe3c1f6c4840a)

通过对旁边栈的分析,它是在另一个js文件中调用的。那个js文件是一个自调用的函数,所以我们可以直接copy下来,用浏览器执行看看

执行运行是会报错的, undefind没有call属性

![](https://p26-tt.byteimg.com/large/pgc-image/308a9276647b4a9a839bad7a87e96dec)

经过调试发现,报错这里是想调用window下面的某一个函数,也就是这个对象属性key为29对应的值

![](https://p26-tt.byteimg.com/large/pgc-image/3cd04e1ba9864ac9923f9210ade72e45)
![](https://p3-tt-ipv6.byteimg.com/large/pgc-image/0c50e020b83d4b35a0416d1ef8745110)

所以我们需要将这个函数添加进去

![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/e89165c6262e41429da31e58dd91f1d7)
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/7fcd6e4896bf4e53bba645f4709ad392)

我们再运行一次,这样就不会报错了

![](https://p26-tt.byteimg.com/large/pgc-image/e3120eff6348459c80513b4c2e6cb31c)

虽说能够成功运行,不报错,但是本地生成的eleven的值是跟携程官网生成的eleven是不一样的

![](https://p9-tt-ipv6.byteimg.com/large/pgc-image/9b0f090992cd428fb93f421f7fc00d7a)

三、解决方案

这段js代码,肯定是对某一些做了判断,我当时猜想过cookie,因为我就是在浏览器中运行,浏览器的一些标识肯定都是一样,又区别的地方应该就是cookie吧。我就就一步一步的调试这这一大段js代码,讲真确实让人看得头疼

![](https://p9-tt-ipv6.byteimg.com/large/pgc-image/0bbcb74bf67349ad90e35323eb0b33a4)

刚开始看确实没多少耐心,点的也很快,也没什么技巧。

有一个老哥说,他能在浏览器执行那段js代码,并且与携程官网的参数能对上。他是新建一个窗口浏览器,通过控制台将js代码copy,再进行调用,我试了下真的可以。我就很奇怪了,那就排除跟cookie有关了。

后面我还是继续调试那段js代码(我是在携程网站进行调试的),发现那段js调用了 3 这个位置的函数,是一个 require 函数,每次调用都抛了异常,它有异常捕捉的代码,所以不会崩掉。

我再调试着本地代码,发现我是没有这个函数的,我再去新建一个浏览器窗口,window.require输出为一个函数,这下终于知道哪里不对了

![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/1cde01cd87b54b8da7d3cc7e807939e4)
![](https://p26-tt.byteimg.com/large/pgc-image/a7ec581119cb4a68be5e557d6ecfccbd)

所以我只需要在 3 那个位置添加这个函数就行了,上面也说过,携程网站它调用这个函数都是抛异常的,所以我们这样写就好了。

![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/8dff23906a3d4fa1a91013e99da09074)

为了防止巧合,我试了很多次,本地和线上生成的eleven都只差一位,意思是说他肯定还对某一项做了检测。

![](https://p26-tt.byteimg.com/large/pgc-image/9ea5eccdbff140ebbf29d17256e4177a)
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/6ea6e9764f7340b5a59e560cd4ff709e)

四、补充

需要注意的几个函数,不是说其他函数不重要,也很重要,但这个比较关键。

![](https://p26-tt.byteimg.com/large/pgc-image/2289254cf6464494815689aa67aef85a)
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/72a57ea213bd4f16b73d85b7fc0f7989)
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/fb5af35607584df4a30c390c76b3c7d9)
![](https://p3-tt-ipv6.byteimg.com/large/pgc-image/2d297c1754994356990d0462c30bfeea)

五、node环境

再弄node环境之前,必要浏览器执行后的eleven要和携程网的对得上,node环境缺什么,报什么错,再跟本地浏览器进行调试。过程肯定不是一帆风顺,但是解出来的时候,会莫名激动

![](https://p1-tt-ipv6.byteimg.com/large/pgc-image/16a35e4f970e4cdb86cb14c067aecb40)

需要源代码或者是了解更多内容点击这里获取

此文转载文,著作权归作者所有,如有侵权联系小编删除!

原文地址:www.tuicool.com/articles/YZ…

分类:
代码人生
标签: