zoukankan      html  css  js  c++  java
  • Python 使用有道翻译

    最近想将一些句子翻译成不同的语言,最开始想使用Python向有道发送请求包的方式进行翻译。

    这种翻译方式可行,不过只能翻译默认语言,不能选定语言,于是我研究了一下如何构造请求参数,其中有两个参数最复杂(salt 和 sign),网络上有很多人发现如何破解,不过我尝试过后发现并不能用,有道已经改版了(2018年6月改版),使用了自己定义的md5加密方式来构建sign参数。

    define("newweb/common/service", ["./utils", "./md5", "./jquery-1.7"],
    function(e, t) {
        var n = e("./jquery-1.7");
        e("./utils");
        e("./md5");
        var r = function(e) {
            var t = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10));
            return {
                salt: t,
                sign: n.md5("fanyideskweb" + e + t + "6x(ZHw]mwzX#u0V7@yfwK")#e 为需要翻译的文本, t为时间戳
            }
        };
    define("newweb/common/md5", ["./jquery-1.7"],
    function(e, t) {
        var n = function(e, t) {
            return e << t | e >>> 32 - t
        },
        r = function(e, t) {
            var n, r, i, o, a;
            return i = 2147483648 & e,
            o = 2147483648 & t,
            n = 1073741824 & e,
            r = 1073741824 & t,
            a = (1073741823 & e) + (1073741823 & t),
            n & r ? 2147483648 ^ a ^ i ^ o: n | r ? 1073741824 & a ? 3221225472 ^ a ^ i ^ o: 1073741824 ^ a ^ i ^ o: a ^ i ^ o
        },
        i = function(e, t, n) {
            return e & t | ~e & n
        },
        o = function(e, t, n) {
            return e & n | t & ~n
        },
        a = function(e, t, n) {
            return e ^ t ^ n
        },
        s = function(e, t, n) {
            return t ^ (e | ~n)
        },
        l = function(e, t, o, a, s, l, c) {
            return e = r(e, r(r(i(t, o, a), s), c)),
            r(n(e, l), t)
        },
        c = function(e, t, i, a, s, l, c) {
            return e = r(e, r(r(o(t, i, a), s), c)),
            r(n(e, l), t)
        },
        u = function(e, t, i, o, s, l, c) {
            return e = r(e, r(r(a(t, i, o), s), c)),
            r(n(e, l), t)
        },
        f = function(e, t, i, o, a, l, c) {
            return e = r(e, r(r(s(t, i, o), a), c)),
            r(n(e, l), t)
        },
        d = function(e) {
            for (var t, n = e.length,
            r = n + 8,
            i = 16 * ((r - r % 64) / 64 + 1), o = Array(i - 1), a = 0, s = 0; s < n;) a = s % 4 * 8,
            o[t = (s - s % 4) / 4] = o[t] | e.charCodeAt(s) << a,
            s++;
            return t = (s - s % 4) / 4,
            a = s % 4 * 8,
            o[t] = o[t] | 128 << a,
            o[i - 2] = n << 3,
            o[i - 1] = n >>> 29,
            o
        },
    View Code

    当使用Python中md5加密方法,虽然与有道得到的参数形式很像,但是始终翻译结果为一群问好。

    于是使用了下面方法,python + selenium,总于可以得到翻译结果。上代码:

    def youdao_trans(trans_sentences):
        driver_path = r"E:python	oolsselenuimDiriverschromedriver_win32_2.40chromedriver.exe"
        chrome = webdriver.Chrome(driver_path)
        chrome.get("http://fanyi.youdao.com/")
        for key in trans_sentences:
            try:
                script = "lans = document.getElementById('languageSelect');lans.childNodes[7].firstElementChild.click()"
                print("translate from:",key)
                chrome.execute_script(script)#这里使用javascript获取翻译语言,注意lans.childNodes[index],index需为奇数,大家在浏览器里运行便可知道原因。
           inputOriginal = chrome.find_element_by_id('inputOriginal') 
           inputOriginal.send_keys(key)
           chrome.implicitly_wait(
    1)
           result
    = chrome.find_element_by_xpath('//div[@id="transTarget"]/p/span')
           yield result.text
           chrome.refresh()
        except Exception as e:
          print(e)
    translate_list = ['你好','如何使用Python编程','今天天气怎么样']
    result
    = youdao_trans(translate_list)
    for r in result:
      print("translate to:", r)

  • 相关阅读:
    01 Jq 基础
    01 属性
    input 编辑框 光标 的相关问题
    登录页面 文字 2 3 4 个字 等宽俩端对齐 空格
    复选框单选框与文字对齐问题的研究与解决
    在Python中对MySQL中的数据进行可视化
    输入2个坐标的数值求出对应坐标间的距离和圆的面积
    numpy中arange函数内起始值必须大于结束值,否则生成为空的一维数组
    条件语句练习-比分预测
    三元表达式是棒棒哒!
  • 原文地址:https://www.cnblogs.com/bradwarden/p/9610893.html
Copyright © 2011-2022 走看看