cnzb
1
最近在用python爬腾讯翻译,但是始终有一个参数不知道怎么来的。
f12在xhr选项卡下面可以看到通过post方式发送数据给https:/fanyi.qq.com/api/translate获取翻译结果,然后在构造请求头时发现有这样一个参数uc,调试发现uc这个参数实时改变,并且没有这个参数中文翻译时翻译结果空白。
于是通过搜索在index.js第21081行找到这样一行代码:const uc = GES();
但是我不熟悉js,看到这里就看不懂了,有没有大佬告诉我uc这个参数怎么得到的?能不能说下过程,最好能够用python实现得到uc的相同效果:
uc图:
index.js图:
index.js文件下载:
我的python代码下载(腾讯翻译.py):
把f12得到的uc值替换下图引号里面的值,再运行代码可以将中文翻译成英文,但是过了约30秒再运行就不能翻译中文了。求助有没有人能去掉多余的代码只保留得到uc的那部分js代码或者用python实现相同的效果?
dms
2
const
声明一个常量
uc
声明的常量名称
GES()
对 GES 函数的调用
看了一下,函数里面的变量名都被写成 16 进制了,非常不好读,就懒得继续看了。就是这样,跟着函数追踪。
cnzb
3
GES()方法是__webpack__require(227)得到的,这是什么意思?
第21行:modules[moduleId].call(module.exports, module, module.exports, webpack_require);
modules[moduleId]里面的modules是函数吗?但是好像找不到modules函数的定义。
另外uc这个参数在index.js文件也只是我猜的,也可能不是这个文件。
如果解释太麻烦的话直接给js代码或者用python代替也行。
dms
5
方括号的话就是数组或者对象了。
开始我也觉得这么沿着代码追踪下去,太麻烦了。后来发现,有些时候大佬比我多的就是耐心,许许多多的耐心。
而现代化的打包工具,又严重的增加了这种追踪的难度。
cnzb
6
index.js第35241行:
谁翻译一下这行什么意思,0x是十六进制吧,猜测和uc生成有关。
dms
7
创建了一个数组,数组里面是一些字符串。
0x
开头是 16 进制,不过这并不重要,因为你可以把它当做一个变量名去看待,你把 _0x5dda
全部替换为诸葛二狗
,效果也是一样的。并没有开玩笑,因为 js 里面是支持使用中文来命名的。
(当然,如果程序利用这个名称进行了某些骚操作,就另当别论了
直接用公开的API吧,腾讯翻译直接提供了 机器翻译_智能翻译_自动翻译-腾讯云 有免费额度……
免费额度
- 文本翻译的每月免费额度为5百万字符。
- 图片翻译的每月免费额度为1万次调用。
- 语音翻译的每月免费额度为1万次调用。
- 免费额度每月1日0点重置。
调用SDK Python-SDK 中心-腾讯云
省事多了
除非你就是想自己学习研究
只能说你是纯粹喜欢这样挖掘的过程……否则难以解释有好用的API而不用的原因
liu
10
除非你的代码可以加载js以及有window对象,否则无法处理
cnzb
11
python可以加载js啊,windows对象是啥?
dms
12
窗口对象,你可以理解为浏览器的窗口。
但确切一些应该是特指当前标签页窗口。包含了一些浏览器本身的相关信息,比如浏览器的窗口尺寸,但是不包含其他标签页的信息,即标签页之间不可以通信。
窗口中的文档,也就是指当前的页面了,这也被包含在窗口对象之内。当然文档中要包含这个页面的一切……
liu
13
顶层对象,因为生成uc的这个函数使用了cryptojs进行的加密,还把一部分内容存到了window上
Juliet
14
我现在也遇到这个问题了,请问你解决了吗?这个uc参数