某哪儿机票解密(1)

应工作需求,需要去爬某哪儿的机票数据,参考了几位大佬,总结了一番。

贴出链接

https://blog.csdn.net/xiongzaiabc/article/details/103253327

https://blog.csdn.net/weixin_44472296/article/details/90958863?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

实际如果只是查航线可以更简单 :)

打开开发者工具调成手机模式,输入网址

https://m.flight.qunar.com/h5/flight/

查询之后发现这个请求有数据。t1000就是解密这串json的JS。

直接在search界面搜索t1000,发现这串JS


意思就是将整个json传进这个t1000函数里面运行,返回的就是真正的json了。

我们去运行一下,直接复制到开发者工具的console里面运行.



发现报错了,根据下面3个url猜测是因为我在本地测试的,当前网页和去哪儿不一样,所以导致报错。 那我们去去哪儿的网页下的console试下。


对比下真实数据,果然输出了正确结果。

但是如果要在node里面执行,还需要对一些参数进行赋值,就要对这t1000进行反混淆,慢慢调试,想偷懒的我当然不想去干这种活。想到了种懒人版的方法。既然可以在浏览器运行,那我再selenium打开去哪儿的网页在执行JS岂不是也能拿到结果!

直接去试了,结果直接内存爆破,卡死在JS,下个断点看了下,检测webdriver,直接去掉,贴上代码


直接可以产生结果了。

但是我要部署到线上的,selenium效率也太低了吧。这时候就有两个可以异步执行的模拟浏览器的工具

一个是pyppeteer,还有个是splash。

Puppeteer 是 Google 基于 Node.js 开发的一个工具,主要是用来操纵 Chrome  浏览器的 API,通过 Javascript 代码来操纵 Chrome 浏览器的一些操作,用作网络爬虫完成数据爬取、Web 程序自动测试等任务。其 API 极其完善,功能非常强大。 而 Pyppeteer 又是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但他不是 Google 开发的,是一位来自于日本的工程师依据 Puppeteer 的一些功能开发出来的非官方版本。

重点是由于 Pyppeteer 是基于 asyncio 构建的它的所有 属性 和方法 几乎都是 coroutine (协程) 对象因此在构建异步程序的时候非常方便,天生就支持异步运行。

同selenium,需要对他进行webdriver重定义

然后JS的写法有稍许改变,最好是去看文档(虽然我也没有看,毕竟能弄出来就行)



然后也能返回正确结果,比selenium还快。但我更推荐 splash,因为他docker部署很简单,快速制作成一个接口,很方便调用,理论上我觉得应该是可以运行的,但是这串json我传过去执行的时候,老是报语法错误,弄了好久,看了好几遍文档也没整明白,如果有大佬搞出来了可以和我讲下,我做出来了也会分享给大家。

那这些网页端需要的pre,_m_,d22e62,这些参数呢?


通过burpsuite重发器测试,这些不带也能查到航线(香)

生成规则和网页端也是一样的,想知道方法可以去看我前面贴的链接。

但是我的任务不只是查机票,还有后续的下单...

后面的才是难点..

过两天更新个(真)JS解密

未完待续..

你可能感兴趣的:(某哪儿机票解密(1))