求助,图片中的请求头uc是怎么来的?

最近在用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文件下载:
https://ws28.cn/f/6jxmqt5ijts
https://cowtransfer.com/s/cc12f80ea30341

我的python代码下载(腾讯翻译.py):
https://ws28.cn/f/6jxxep3qnjk
https://cowtransfer.com/s/9b470674d5c143
把f12得到的uc值替换下图引号里面的值,再运行代码可以将中文翻译成英文,但是过了约30秒再运行就不能翻译中文了。求助有没有人能去掉多余的代码只保留得到uc的那部分js代码或者用python实现相同的效果?

  • const 声明一个常量
  • uc 声明的常量名称
  • GES() 对 GES 函数的调用

看了一下,函数里面的变量名都被写成 16 进制了,非常不好读,就懒得继续看了。就是这样,跟着函数追踪。

GES()方法是__webpack__require(227)得到的,这是什么意思?
第21行:modules[moduleId].call(module.exports, module, module.exports, webpack_require);
modules[moduleId]里面的modules是函数吗?但是好像找不到modules函数的定义。
另外uc这个参数在index.js文件也只是我猜的,也可能不是这个文件。
如果解释太麻烦的话直接给js代码或者用python代替也行。

这个是现在前端用到的打包工具创建的引用关系

方括号的话就是数组或者对象了。

开始我也觉得这么沿着代码追踪下去,太麻烦了。后来发现,有些时候大佬比我多的就是耐心,许许多多的耐心。

而现代化的打包工具,又严重的增加了这种追踪的难度。

index.js第35241行:


谁翻译一下这行什么意思,0x是十六进制吧,猜测和uc生成有关。

创建了一个数组,数组里面是一些字符串。

0x 开头是 16 进制,不过这并不重要,因为你可以把它当做一个变量名去看待,你把 _0x5dda 全部替换为诸葛二狗,效果也是一样的。并没有开玩笑,因为 js 里面是支持使用中文来命名的。

(当然,如果程序利用这个名称进行了某些骚操作,就另当别论了

直接用公开的API吧,腾讯翻译直接提供了 机器翻译_智能翻译_自动翻译 - 腾讯云 有免费额度……

免费额度

  • 文本翻译的每月免费额度为5百万字符。
  • 图片翻译的每月免费额度为1万次调用。
  • 语音翻译的每月免费额度为1万次调用。
  • 免费额度每月1日0点重置。

调用SDK Python - SDK 中心 - 腾讯云
省事多了
除非你就是想自己学习研究

只能说你是纯粹喜欢这样挖掘的过程……否则难以解释有好用的API而不用的原因

我想搞个软件聚合翻译,没人解决就算了

除非你的代码可以加载js以及有window对象,否则无法处理

python可以加载js啊,windows对象是啥?

窗口对象,你可以理解为浏览器的窗口。

但确切一些应该是特指当前标签页窗口。包含了一些浏览器本身的相关信息,比如浏览器的窗口尺寸,但是不包含其他标签页的信息,即标签页之间不可以通信。

窗口中的文档,也就是指当前的页面了,这也被包含在窗口对象之内。当然文档中要包含这个页面的一切……

顶层对象,因为生成uc的这个函数使用了cryptojs进行的加密,还把一部分内容存到了window上

我现在也遇到这个问题了,请问你解决了吗?这个uc参数