最近想将一些句子翻译成不同的语言,最开始想使用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
},

当使用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)

Python 使用有道翻译的更多相关文章

  1. Python 实现有道翻译命令行版

    一.个人需求 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性 ...

  2. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  3. python利用有道翻译实现“语言翻译器”的功能

    import urllib.request import urllib.parse import json while True: content = input('请输入需要翻译的内容(退出输入Q) ...

  4. python调用有道翻译api实现翻译

    通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...

  5. Python制作有道翻译小工具

    该工具主要是利用了爬虫,爬取web有道翻译的内容. 然后利用简易GUI来可视化结果. 首先我们进入有道词典的首页,并点击翻译结果的审查元素 之后request响应网页,并分析网页,定位到翻译结果. 使 ...

  6. python爬虫-有道翻译-js加密破解

    有道翻译-js加密破解 这是本地爬取的网址:http://fanyi.youdao.com/ 一.分析请求 我们在页面中输入:水果,翻译后的英文就是:fruit.请求携带的参数有很多,先将参数数据保存 ...

  7. python爬有道翻译

    在有道翻译页面中打开开发者工具,在Headers板块找到Request URL以及相应的data. import urllib.request import urllib.parse import j ...

  8. Python 之有道翻译数据抓取

    import requests import time def you_dao(): key = input("请输入要翻译的内容:") # key = "哈哈" ...

  9. python实战-有道翻译

    #导入urllib包里的request请求模块import urllib.request#导入urllib包里的解析模块 import urllib.parse import json content ...

随机推荐

  1. 【Python全栈-JavaScript】jQuery事件

    jQuery事件 一.页面载入 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数. 这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度. 简单地说,这个方法纯粹是对向 w ...

  2. 添加新网络模型后运行报错:未定义的参数:ps_roipooling param

    现象描述:在新增了具有自定义的data层或者loss层的网路之后,工程运行会报错: 疑惑:并没有这样的参数新增,并且前向的deploy文件已经将自定义的loss以及data等都去掉了: 可能的原因:虽 ...

  3. Maven项目无法找到mybatis的xml映射文件

    通常我们的xml映射文件会放在源码中,普通的java项目在编译时可以将src下的xml放到classes文件中. 但maven项目编译时是不会将xml放到classes文件中,从而导致我们的mybat ...

  4. SpringMVC Web项目升级为Springboot项目(一)

    一.项目改为Springboot项目 1.将pom中所有spring相关依赖删除,添加spring-boot-starter及spring-boot-starter-web(项目中可能有其他sprin ...

  5. 模拟网络状况工具——clumsy

    官网:http://jagt.github.io/clumsy/index.html 官网上的介绍已经很易懂了,所以本文只是直接翻译了官网内容. clumsy 能在 Windows 平台下人工造成不稳 ...

  6. Ajax post数据查询

    <?php $server = '127.0.0.1'; $user = 'root'; $password = ''; $database = 'yiibaidb'; $officecode ...

  7. zabbix基础服务搭建

    监控系统的介绍 性能优化和监控点 1.cpu           调度器          有效的分配cpu的时间片           上下文切换           运行队列            ...

  8. 【Eclipse】-NO.163.Eclipse.1 -【Eclipse springboot 1.x 创建maven工程初始化报错】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  9. Oracle删库跑路

    --10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database; -- ...

  10. .net EF之CodeFirst代码先行(转)

    为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不使用设计器或者定义一个 XML ...