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\tools\selenuimDirivers\chromedriver_win32_2.40\chromedriver.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)

 

posted @ 2018-09-08 22:34  Bradwarden  阅读(2956)  评论(2编辑  收藏  举报