找到关键请求以后,就要分析请求,而后去构造请求。分析请求有一下几个要素,url,请求方法,请求头,请求参数。html
请求参数有七个,能够经过反复请求而后比较的方法得出from
,to
是表示翻译语言的,transtype
,simple_means_flags
这两个的值没有变。最关键的是query
,sign
,token
参数,其中query
是要查询的单词字符串。sign
和token
须要分析。python
请求的参数有三个来源ajax
第一个请求返回的页面html源码中浏览器
前面的某次请求返回的数据cookie
请求以前由js动态生成ide
打开百度翻译页面源码,复制上面请求中token
的值而后搜索,果真在页面源码中发现了token
的值。函数
通过分析,发现sign
的值随着单词的不一样而不一样,而且由于当前请求是ajax的,因此sign
必定是js动态生成的。工具
js逆向的三种方法测试
经过页面元素触发函数进行定位请求执行js代码url
经过开发者调试工具network
选项中的initiator
栏进行定位
经过搜索参数名进行定位
我把sign搜它出来发现sign函数
去这是js看下
打断点,回车,运行下js
最后一步一步来调试
很快找到了来源
发现处理的方法就是e
,n
两个函数,经过PyExecJS
模块进行js测试。由于这js函数看不懂,不建议改写成python函数,将这两段函数代码复制到文本中,保存为baidu.js
文件
PyExecJS是一个实现经过python执行js代码的库。
安装:
$ pip install PyExecJS
PyExecJS入门
直接运行e
,n
两个函数
分析js代码,发现其中有个window
的变量,原来window
没定义
不知道它是啥,打断点,看下啥东西
window[gbk] ,window不就是一个变量来的,去看下local变量
local没有,看global
在window中寻找gbk
在js先用"320305.131321201" 代替window[l],运行
这就是我找了很久的的sign
是否是每一个单词的sign都是同样的呢?
尝试到html页面中去查找,发现是一个在html页面中定义的变量。
这是个固定值,能够直接写成常量,也能够取页面获取。
思路
利用正则将页面的token拿下来
window[gbk]是固定的,封装函数来获得sign
这里有个神坑:发现页面请求了两次,第一次的页面token
不是合法token
。
用seesion来访问保存cookie这样成功率高点
声明:本文只作技术交流,不提供源码,若有侵权,请告知删除,谢谢。
一直原创,从未转载
请认准我,将我置标
转发,好看支持一下,感谢