使用js逆向破解百度翻译

import execjs  # 导入pyexecjs第三方库
import requests
from jsonpath import jsonpath

# 从键盘输入要翻译的文本
text = input('请输入需要翻译的内容:')
# 定义请求头
headers = {
    # 百度翻译的反爬参数,有时候会检测, 这个不确定,最好加上防止报错
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Cookie': 'PSTM=1708938193; BAIDUID=0AF8B748D2DB29B9B7FEF25D19D58490:FG=1; BIDUPSID=61EFB8308B865051E5F8631A3C6BCB97; BAIDUID_BFESS=0AF8B748D2DB29B9B7FEF25D19D58490:FG=1; ZFY=xshd35C:AmEYMzdZQNyI1yWT7iaHNJID1g8R:A0EeU7E8:C; H_PS_PSSID=39661_40207_40212_40217_40222_40245_40273_40275_40294_40290_40289_40286_40318_40079; BDRCVFR[ELcT9xRAHcn]=eeLTGPPn8OcUA-9UhICpi4WUvY; BA_HECTOR=852lala000010kag84a181agdilrh81iubdup1t; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[S4-dAuiWMmn]=FQ44sLKC86Tfj63njb1nWRkg1DzrNqC; PSINO=6; APPGUIDE_10_6_9=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1709553679; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1709553722; ab_sr=1.0.1_NTNmNjVjY2E4MGYxYTEyNzI0MGM5NWU4MjM5NjhkYWViNzczZjQ0NWYwMzM4YTk4MGJjZjMzNzQ1ZjAzMzcwZDYzYmM4MzRhYjRiZjc2MWEzMjZiZjMyYzBjMjA0NDQ3NTM1NzVhZThjMTY0MGUzNzIzYzlhNzJhYTJmYTQxOGUyNjliMDhjNWM3ZTQwZGFmMDM4YjM2ZDM3NjFjYWNiYg==',
    'Acs-Token': '1709553606089_1709553723275_n3WxevKXgtnCKxy1XFu7Woehpk9N6EGkbxfUxn42D5DN8TgcckP4kXzUsDyk3MDcKCjbJpM55CgycxPVmeuZKWCcFfpJS9/jFDNtRiWP3T+kn82f0xsvu3ET0Qy97C4XMR1HuesWmCa7bBKSFYmPY+G3exluQGlnrsnRthAGR2o4ygp63JtQT6GwSMOsDC2HeQ2My75jUEaR9xvkS+w8RNXkRNjKEIdy3CCK+ZyNp+784D6BT8WqH9wrar30wXbU8YPG3LMn/gDReWJrEqOXVvZqpTiX9DLSqm5yGO/0xZeolrgdk4DAJikU59jTqucoCKdj9AfZsk0h90vwt+iKCfBC2Sz3ETez0nUEeUgprlZEkPIoEx8K8RYHPz5AXwM07ibolIugsVgl9fSvShj4bczii6DOu0K4PnU2na2u9ssU3j43DUrLeDS5HnnIZlsUKykWWjfwX0bXwLbf5Wihix2MbwIMZC/6s3MvC4R7nOo='
}
# 实现翻译功能的请求链接
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
# 先读取js代码中的文本内容
with open('note_13.js', 'r', encoding='utf-8') as file:
    js_data = file.read()

# 使用execjs库中的compile方法将js代码的文本内容转换成js对象
js_obj = execjs.compile(js_data)

# 使用js对象调用js代码中的func函数
sign = js_obj.call('func', text)
# print('计算出的sign的值为:', sign)

# 定义表单参数
form_data = {
    'from': 'auto',
    'to': 'auto',
    'query': text,
    'simple_means_flag': '3',
    'sign': sign,
    'token': '21b0ef33e45eb8da3cf20318cef8e190',
    'domain': 'common',
    'ts': '1709553723217'
}
response = requests.post(url, headers=headers, data=form_data)
json_data = response.json()
# print(json_data)
# 将翻译文本筛选出来
data = jsonpath(json_data, '$..dst')[0]
print('翻译的结果为:', data)

"""
这是从网页中找到的b函数,用于计算出sign的值,参数t就是需要翻译的文本内容
t.exports = function(t) {
    var o, i = t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    if (null === i) {
        var a = t.length;
        a > 30 && (t = "".concat(t.substr(0, 10)).concat(t.substr(Math.floor(a / 2) - 5, 10)).concat(t.substr(-10, 10)))
    } else {
        for (var s = t.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), c = 0, u = s.length, l = []; c < u; c++)
            "" !== s[c] && l.push.apply(l, function(t) {
                if (Array.isArray(t))
                    return e(t)
            }(o = s[c].split("")) || function(t) {
                if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"])
                    return Array.from(t)
            }(o) || function(t, n) {
                if (t) {
                    if ("string" == typeof t)
                        return e(t, n);
                    var r = Object.prototype.toString.call(t).slice(8, -1);
                    return "Object" === r && t.constructor && (r = t.constructor.name),
                    "Map" === r || "Set" === r ? Array.from(t) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? e(t, n) : void 0
                }
            }(o) || function() {
                throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
            }()),
            c !== u - 1 && l.push(i[c]);
        var p = l.length;
        p > 30 && (t = l.slice(0, 10).join("") + l.slice(Math.floor(p / 2) - 5, Math.floor(p / 2) + 5).join("") + l.slice(-10).join(""))
    }
    for (var d = "".concat(String.fromCharCode(103)).concat(String.fromCharCode(116)).concat(String.fromCharCode(107)), h = (null !== r ? r : (r = window[d] || "") || "").split("."), f = Number(h[0]) || 0, m = Number(h[1]) || 0, g = [], y = 0, v = 0; v < t.length; v++) {
        var _ = t.charCodeAt(v);
        _ < 128 ? g[y++] = _ : (_ < 2048 ? g[y++] = _ >> 6 | 192 : (55296 == (64512 & _) && v + 1 < t.length && 56320 == (64512 & t.charCodeAt(v + 1)) ? (_ = 65536 + ((1023 & _) << 10) + (1023 & t.charCodeAt(++v)),
        g[y++] = _ >> 18 | 240,
        g[y++] = _ >> 12 & 63 | 128) : g[y++] = _ >> 12 | 224,
        g[y++] = _ >> 6 & 63 | 128),
        g[y++] = 63 & _ | 128)
    }
    for (var b = f, w = "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(97)) + "".concat(String.fromCharCode(94)).concat(String.fromCharCode(43)).concat(String.fromCharCode(54)), k = "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(51)) + "".concat(String.fromCharCode(94)).concat(String.fromCharCode(43)).concat(String.fromCharCode(98)) + "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(102)), x = 0; x < g.length; x++)
        b = n(b += g[x], w);
    return b = n(b, k),
    (b ^= m) < 0 && (b = 2147483648 + (2147483647 & b)),
    "".concat((b %= 1e6).toString(), ".").concat(b ^ f)
}

"""

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值