某哪儿机票JS解密(3)--python调用node产生正确的航线和pre

终于,历经了2-3个星期,破解了所有去哪儿下单所要的数据。从一开始的pre,_m_,不确定的header 和 key ,value。还有个后面因为我用了模拟浏览器过滑动验证码而没用到的faver请求!(这个请求也折腾了我半天,但是只要找到他的JS在哪生成的,就好办了,这个不具体讲解了,是真的又长又臭).滑动验证码我是实在不想解密JS了,还没找到js所在的地方,而且这个用模拟浏览器过的非常简单,所以偷个小懒,问题不大。


faver请求返回Cookie:quinn


成功产生faver的data

用python方法翻译后和JS产生的数据有出入,所以只好调用node执行js了

需要交流的朋友可以加我企鹅号MjgyMjgwMjcy(base64)

回归正题,如何用node产生pre.

第一篇文章,我用了偷懒的办法产生了正确的json返回。但是最后我还是想用node产生正确的json.

我们先用node试下



果然 死循环了,又是内存爆破。既然是死循环,那肯定有for,我们先确定在哪个for里面进入的,然后看他判断条件,按照真实网站修改就可以了对吧。思路是这样的,我们先确定在哪里进的死循环


一共5个for循环,我们在里面分别打印1,2,3,4,5,来区别在哪个for循环里面。

(不要忘了还有while也能死循环)


记上 6、7、8


满屏的7777(暗示我厂长?)


分析下 应该是哪里调用_0xfcaef1 这个function


就是这里,看他应该是if这个条件报错了所以进入了死循环,我们在if前面下个debugger;


原来是判断window.navigator.webdriver这个属性.

我们根本没有赋值window,就进入catch了,我们构造个window对象吧。

var window =global;

window = {navigator:{webdriver:undefined}};


报错没有定义location,根据报错,我们把所有的都定义上吧。


到了这步,我这种JS小白就不知道怎么办了。(应该有大神可以直接写原生js构造这些吧,虚心求教,jsdom比模拟浏览器快多了,但是还是没原生js快)

为了方便,我直接引入了一个依赖 ---jsdom

下载 npm install jsdom

可以在node里面构造浏览器里的window对象等等非常方便。


jsdom文档


根据文档和调试构建的对象

运行一下


发现还是报错了但是打印了一部分数据,说明还是环境没有对上官网。

经过我的不断调试(走遍了所有IF的条件)发现他还判断了各种标签,就是官网源代码的部分


那么我们给他添加进jsdom就完事了。



成功在node中获取到json数据


其实这里还有个小bug,有些数据还需要添加个环境才能正常返回,这里卖个关子,也是在if条件里可以找到。

成功获取正确的json之后,我在调试的时候发现,这串js不只是航线数据,还有返回pre!怪不得比web端的js多了这么多数据。

这点和网页版是不同的,怪不得我老感觉请求带的pre和页面的pre对不上,原来是这里的pre。


成了!pre的条件和json条件相同。console.log("pre:" +window._pt_);就出来了。

最后我用了最近学的一种新方法来获取js的返回值 ,不需要用execjs也能调用js啦。

前面截图仔细看的话应该有发现。

python调用命令行执行node获取返回值

但是如果打印json的话就会碰到编码问题,这时候我就用了种更高级的方式

使用subprocess 子进程调用命令行执行命令,打印返回的值


成功解决这个问题!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,372评论 0 3
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,618评论 0 7
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,513评论 1 37
  • JS基础 页面由三部分组成:html:超文本标记语言,负责页面结构css:层叠样式表,负责页面样式js:轻量级的脚...
    小贤笔记阅读 642评论 0 5
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,138评论 0 2