记录第一次制作脚本
本文记录制作一个调用百度翻译实现翻译功能的小脚本
主要有三个步骤:【找接口】=>【研究关键字】=>【写脚本】
找到翻译请求接口
这一步没有难度,在百度翻译页面打开开发者工具,然后输入哈哈
,然后在network里找接口就可以。
如果请求太多的话,可以用Fetch/XHR
按钮过滤一下:
可以看到,这是一个POST请求
分析请求关键字
从上面看到,关键字有from、to、query、transtype、simple_means_flag、sign、token、domain。
分析之后,得出:from、to代表输入语言、输出语言;query为输入文字;transtype为翻译类型(自动翻译、点击后翻译等,这个关键字并不重要);domain为常值”common”。而sign和token为一串奇怪的数字
from、to指定语言类型,后面发现,from是可以自动检测或者手动指定的。如果希望自动检测,那就需要在请求翻译接口前请求一次langdetect,并匹配出语言类型。
query由用户输入;transtype和simple_means_flag完全可以写死。
至于token,全局搜索一下那串字符,发现它是请求fanyi.baidu.com时获取到的
截止到目前,我需要关心的字段有:
- from:通过langdetect请求获取
- query:由用户输入
- token:请求fanyi.baidu.com获取
- sign:一个神秘字段
现在来研究这个sign:
像token一样进行全局搜索,没有结果
从v2transapi请求的调用栈中寻找线索
一层层地观察call stack,在e.onTranslate附近发现可疑之处
经过打断点调试,发现这里的n就是我输入的
哈哈
二字,所以,我只需要找到这个x()函数,就能得到sign的值!!!在控制台里输入
x
并回车,弹出了我想要的函数。但在复制得到的函数并不能直接运行,因为函数中往往存在一些全局变量或调用了其他函数,这时,需要耐心地把它们补全。经历了一个window.gtk、一个n函数,我终于得到了sign值:至此,关键字全部复现。
写(抄)脚本
脚本用python编写,写的过程中要注意请求头携带cookie。
另外,我在初次使用PyCharm时,遇到了两个问题:
运行不了js脚本:其实,通过命令行是可以直接node xxx.js的;但最后找到了标准方法——下载nodejs插件。。。
py文件中import报错:我明明已经安装过这些库了,怎么说我没有呢?原来新建项目的时候,PyCharm给我在项目目录下放了一个精简的python编译器,而我所安装的库,都在我的AppData那里。。。于是有两种解决思路:一是在项目目录下安装那些库,二是直接使用我自己的解释器。