分析页面
首先进行一次正常的翻译操作,F12 打开开发者工具,点击 Network 标签,点击翻译按钮,可以看到下面第一条请求,点击进去查看。
这条请求的方式是 POST,其 Form Data 参数如下所示,其中可能加密的参数有 salt, sign, ts, bv 这四个参数。
1 | i: 你好 |
分析 js 文件
通过查看网站源文件,发现其加密参数被放在了 fanyi.min.js
文件中,由于 js 代码被压缩过,因此需要先把代码进行格式化,点击左下角的 {}
就可以把代码格式化。
格式化后如下图所示,看着舒服多了。
按照关键词 salt 和 sign 搜索它们出现在代码中的位置,可以看到下图。
可以看到,参数中的 ts, bv, salt 和 sign 参数都在这里了,这里先打一个断点看下结果。
其实在这里就已经大致能知道各个参数的加密过程了,加密过程在上图中有解释,不再过多介绍。唯一不明显的就是这个 appVersion ,其实它也是个固定值,是跟着浏览器的 User-Agent 变动的,鼠标放置在 navigator 上面,出现了 navigator 的属性框,其中第三行就是 appVersion, bv 值其实就是将 appVersion 加密后的值。
模拟加密过程
salt 参数
1 | def get_salt(): |
sign 参数
1 | def get_md5(v): |
ts 参数
1 | def getts(): |
bv 参数
1 | def getbv(self): |
完整代码
1 | import hashlib |