把前端代码抠出来,进行本地运行解析参数,这也就是知云翻译所用的方法吧~
转载链接地址

import requests
import re
import execjsclass BaiduTranslateSpider(object):def __init__(self):self.token_url = 'https://fanyi.baidu.com/?aldtype=16047'self.post_url = 'https://fanyi.baidu.com/v2transapi'self.headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',# 'accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','cookie': 'BAIDUID=52920E829C1F64EE98183B703F4E37A9:FG=1; BIDUPSID=52920E829C1F64EE98183B703F4E37A9; PSTM=1562657403; to_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; delPer=0; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BCLID=6890774803653935935; BDSFRCVID=4XAsJeCCxG3DLCbwbJrKDGwjNA0UN_I3KhXZ3J; H_BDCLCKID_SF=tRk8oIDaJCvSe6r1MtQ_M4F_qxby26nUQ5neaJ5n0-nnhnL4W46bqJKFLtozKMoI3C7fotJJ5nololIRy6CKjjb-jaDqJ5n3bTnjstcS2RREHJrg-trSMDCShGRGWlO9WDTm_D_KfxnkOnc6qJj0-jjXqqo8K5Ljaa5n-pPKKRAaqD04bPbZL4DdMa7HLtAO3mkjbnczfn02OP5P5lJ_e-4syPRG2xRnWIvrKfA-b4ncjRcTehoM3xI8LNj405OTt2LEoDPMJKIbMI_rMbbfhKC3hqJfaI62aKDs_RCMBhcqEIL4eJOIb6_w5gcq0T_HttjtXR0atn7ZSMbSj4Qo5pK95p38bxnDK2rQLb5zah5nhMJS3j7JDMP0-4rJhxby523i5J6vQpnJ8hQ3DRoWXPIqbN7P-p5Z5mAqKl0MLIOkbC_6j5DWDTvLeU7J-n8XbI60XRj85-ohHJrFMtQ_q4tehHRMBUo9WDTm_DoTttt5fUj6qJj855jXqqo8KMtHJaFf-pPKKRAashnzWjrkqqOQ5pj-WnQr3mkjbn5yfn02OpjPX6joht4syPRG2xRnWIvrKfA-b4ncjRcTehoM3xI8LNj405OTt2LEoC0XtIDhMDvPMCTSMt_HMxrKetJyaR0JhpjbWJ5TEPnjDUOdLPDW-46HBM3xbKQw5CJGBf7zhpvdWhC5y6ISKx-_J68Dtf5; ZD_ENTRY=baidu; PSINO=2; H_PS_PSSID=26525_1444_21095_29578_29521_28518_29098_29568_28830_29221_26350_29459; locale=zh; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1563426293,1563996067; from_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1563999768; yjs_js_security_passport=2706b5b03983b8fa12fe756b8e4a08b98fb43022_1563999769_js','pragma': 'no-cache','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',}# 获取token和gtkdef get_token(self):# 定义请求头r = requests.get(self.token_url, headers=self.headers)token = re.findall(r"token: '(.*?)'", r.text)window_gtk = re.findall(r"window.*?gtk = '(.*?)';</script>", r.text)if token:return token[0], window_gtk[0]# 获取signdef get_sign(self, word, gtk):with open('translate.js', 'r',encoding='utf-8') as f:js_data = f.read()exec_object = execjs.compile(js_data)sign = exec_object.eval('e("{}","{}")'.format(word, gtk))return sign# 主函数def main(self, word, fro, to):token, gtk = self.get_token()sign = self.get_sign(word, gtk)# 找到form表单数据如下,sign和token需要想办法获取form_data = {'from': fro,'to': to,'query': word,'transtype': 'realtime','simple_means_flag': '3','sign': sign,'token': token}r = requests.post(self.post_url, data=form_data, headers=self.headers)print(r.json()['trans_result']['data'][0]['dst'])if __name__ == '__main__':spider = BaiduTranslateSpider()choice = input('1. 英译汉 2. 汉译英 : ')word = input('请输入要翻译的单词:')if choice == '1':fro, to = 'en', 'zh'elif choice == '2':fro, to = 'zh', 'en'spider.main(word, fro, to)
function a(r) {if (Array.isArray(r)) {for (var o = 0, t = Array(r.length); o < r.length; o++)t[o] = r[o];return t}return Array.from(r)}
function n(r, o) {for (var t = 0; t < o.length - 2; t += 3) {var a = o.charAt(t + 2);a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a),a = "+" === o.charAt(t + 1) ? r >>> a : r << a,r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a}return r
}
function e(r) {var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if (null === o) {var t = r.length;t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))} else {for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)"" !== e[C] && f.push.apply(f, a(e[C].split(""))),C !== h - 1 && f.push(o[C]);var g = f.length;g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))}//   var u = void 0//   , l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);//   u = null !== i ? i : (i = window[l] || "") || "";//    String.fromCharCode(103)="g"//    String.fromCharCode(103)="t"//    String.fromCharCode(103)="k"//    window.gtk也就是从网页源码中取值//    进入函数断点调试var u = '320305.131321201'for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {var A = r.charCodeAt(v);128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)),S[c++] = A >> 18 | 240,S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224,S[c++] = A >> 6 & 63 | 128),S[c++] = 63 & A | 128)}for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++)p += S[b],p = n(p, F);return p = n(p, D),p ^= s,0 > p && (p = (2147483647 & p) + 2147483648),p %= 1e6,p.toString() + "." + (p ^ m)
}

execjs使用体验相关推荐

  1. 【JS 逆向百例】网洛者反爬练习平台第七题:JSVMPZL 初体验

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 逆向过程 Hook 关键方法 日志断点 / 插桩调试 声明 本文章中所有内容仅供学习交流,抓包内容.敏 ...

  2. BERT可视化工具bertviz体验

    BERT可视化工具体验:bertviz是用于BERT模型注意力层的可视化页面. 1,bertviz的github地址:https://github.com/jessevig/bertviz 2,将be ...

  3. 深度学习调参体验(二)

    深度学习调参体验(二) 激活函数选择: 常用的激活函数有relu.leaky-relu.sigmoid.tanh等.对于输出层,多分类任务选用softmax输出,二分类任务选用sigmoid输出,回归 ...

  4. 深度学习调参体验(一)

    深度学习调参体验(一) 基本原则: 快速试错 一.一些大的注意事项: 1.先上小规模数据, 模型往大了放, 只要不爆显存, 能用256个filter就别用128个.直接奔着过拟合去.就是训练过拟合网络 ...

  5. 红旗linuxcentos_用红旗Linux 11的体验报告,附使用红旗Linux 11截图

    以下是用红旗Linux 11(英文名是RedFlag Linux Desktop 11)的体验报告,另附上使用红旗Linux 11的桌面截图. 前言 首先,不带偏见的说下,红旗Linux 11因为是首 ...

  6. 石头机器人拖地水量调节_石头扫地机器人T7上手体验:电控水箱和超大容量,扫拖一体全能型...

    [微创WEC科技]前段时间,给大家带来了石头扫地机器人P51的体验,今天给大家带来一个更"猛"一点的,就是今年石头机器人的旗舰产品:T7. 石头扫地机器人T7上手体验视频 要知道石 ...

  7. 如何把手变成手控_在这个模拟手的VR游戏里,你能体验到很多手控福利

    原标题:在这个模拟手的VR游戏里,你能体验到很多手控福利 前排提示,部分图片可能导致掉San. 如今的电子游戏越来越真实,但始终存在一个局限,那就是玩家通常使用手柄.键鼠等外设来控制角色,没法与游戏实 ...

  8. Flutter 导包 以及体验

    Flutter 第一个list 体验 具体位置看图吧 是在pubspec.yaml 里面的 dev_dependencies 里面 然后点击packages_get flutter 不用每次都运行,保 ...

  9. 开源组件websocket-sharp中基于webapi的httpserver使用体验

    一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...

最新文章

  1. 我的实用设计模式 - Simple Factory和Reflection
  2. 使用 VisualVM 进行性能分析及调优
  3. PC微信逆向:使用HOOK拦截二维码
  4. 企业SAP的二次开发管理之路
  5. 苹果手机怎么清理听筒灰尘_安卓 | 让手机自动清理听筒扬声器灰尘,你试过了吗?...
  6. nssl1255-B(轻功)【SPFA,分层图】
  7. php怎样完成批量审核,CMS_DedeCMS 批量取消审核文档的实现方法,今天修改了几个地方的代码 实 - phpStudy...
  8. python正则表达式中group
  9. js 基础之Math对象
  10. Spring 注解@Resource @Autowired @Service @Component
  11. java数据库编程--执行数据库更新操作
  12. 微信小程序05 事件绑定与事件传参
  13. Delphi 10.4.1 游戏开发引擎unDelphiX
  14. 安卓6.0系统一键激活XPOSED框架的方法
  15. powerVR tbdr 硬件架构理解
  16. 【踩坑记录】导航时出现原地旋转,然后无法执行导航
  17. ESP32-S3-WROOM-1-N16R8 配置PSRAM
  18. 什么是SDK什么是CDN
  19. wp手机开发之获取汉字拼音的首字母
  20. Percona-MyRocks安装

热门文章

  1. 斐讯K2 22.4.5.39等带自动重启固件 路由器开启telnet
  2. 最新手机号、身份证号、邮箱的正则判断
  3. Docker安装时提示Existing installation is up to date
  4. 数据分析真题日刷 | 网易2018实习生招聘笔试题-数据分析实习生
  5. UGUI的Text描边Outline拓展
  6. JFreeChart 制作柱状图并填充到excel上
  7. matlab:图像识别
  8. 期货分仓软件的功能界面
  9. 网友咨询:手机卡套餐可以换成流量卡套餐吗?说一说改套餐的问题!
  10. HDFS将普通用户添加到超级用户组