python3.7.7
使用方法都有说明
☆—转载请标明出处—☆
py文件:
from tkinter import *
import execjs
import requests
import re
from tkinter import messagebox
class lil_transelll(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widget()
def create_widget(self):
self.label01 = Label(self, text="请输入要翻译的英文或中文内容")
self.label01.pack()
self.require = StringVar()
self.enter = Entry(self, textvariable=self.require)
self.enter.pack()
self.btn01 = Button(self, text="确认", command=self.tran,)
self.btn01.pack()
self.label02 = Label(self, height=5, width=40, bg="linen")
self.label02.pack()
# 滚动条与输出框
self.frame01 = Frame(self, height=100,
width=40)
self.frame01.pack()
self.output = Listbox(self.frame01, width=35,
height=10,
bg="linen")
self.output.pack(side=LEFT)
self.roll_y = Scrollbar(self.frame01)
self.roll_y.pack(side=RIGHT, fill=Y)
self.frame00 = Frame(self, height=100,width=35)
self.frame00.pack()
self.label = Label(self.frame00,
text="the storage widget",
width=20,height=1)
self.label.pack(side=BOTTOM)
self.roll_x = Scrollbar(self.frame00,
orient=HORIZONTAL,)
self.roll_x.pack(side=TOP, fill=X)
self.output.config(yscrollcommand=self.roll_y.set,
xscrollcommand=self.roll_x.set)
self.roll_y.config(command=self.output.yview)
self.roll_x.config(command=self.output.xview)
def test(self):
self.label02["text"] = "shit"+self.require.get()
def tran(self):
if self.require.get() == "":
messagebox.showinfo("还没有输入", "请先输入")
return
tranned = trans(self.require.get())
self.label02["text"] = tranned.res_1
for item in tranned.res_2:
self.output.update()
self.output.insert(END, str(item))
self.output.update()
self.output.see(END)
class trans:
_headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-Hans-CN, zh-Hans; q=0.5",
# "Connection":"keep-alive",
"Content-Length": "11",
"Cache-Control": "no-cache",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1591278298; SOUND_PREFER_SWITCH=1; FANYI_WORD_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1591095381,1591095525,1591096393,1591278298; SOUND_SPD_SWITCH=1; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; BDRCVFR[SL8xzxBXZJn]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=; ZD_ENTRY=baidu; session_id=1591108364429; session_name=www.baidu.com; BAIDUID=5987A42D6DC28621AEC052A0C8A7DD6E:FG=1; BIDUPSID=B2D9DC5D8812A76030109CE30AD7C1FA; PSTM=1591104396; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=4e9ab7a84e10cdbcd57f89d1abda7cfa21994d86_1591278299_js; __yjsv5_shitong=1.0_7_f0c203096c3bc26bd0f633283b9f07243a8e_300_1591278298784_182.90.204.123_e339399f",
"Host": "fanyi.baidu.com",
"Origin": "https://fanyi.baidu.com",
"Referer": "https://fanyi.baidu.com/?aldtype=16047",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
"X-Requested-With": "XMLHttpRequest"
}
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Connection": "keep-alive",
"Content-Length": "132",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1591278298; SOUND_PREFER_SWITCH=1; FANYI_WORD_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1591095381,1591095525,1591096393,1591278298; SOUND_SPD_SWITCH=1; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; BDRCVFR[SL8xzxBXZJn]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=; ZD_ENTRY=baidu; session_id=1591108364429; session_name=www.baidu.com; BAIDUID=5987A42D6DC28621AEC052A0C8A7DD6E:FG=1; BIDUPSID=B2D9DC5D8812A76030109CE30AD7C1FA; PSTM=1591104396; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=4e9ab7a84e10cdbcd57f89d1abda7cfa21994d86_1591278299_js; __yjsv5_shitong=1.0_7_f0c203096c3bc26bd0f633283b9f07243a8e_300_1591278298784_182.90.204.123_e339399f",
"Host": "fanyi.baidu.com",
"Origin": "https://fanyi.baidu.com",
"Referer": "https://fanyi.baidu.com/?aldtype=16047",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
"X-Requested-With": "XMLHttpRequest"
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763",
}
_url = "https://fanyi.baidu.com/langdetect"
url = 'https://fanyi.baidu.com/v2transapi'
def __init__(self, word):
self.re_sentence = word
self.res_1 = ""
self.res_2 = []
self.out_put()
def get_lg(self):
parameters_1 = {
"query": self.re_sentence
}
_req = requests.post(trans._url, data=parameters_1, headers=trans._headers)
_req.encoding = "utf-8"
lg = _req.text.split('"')[-2]
print(lg)
return lg
def get_sign(self):
with open("fy.js") as f:
jsData = f.read()
sign = execjs.compile(jsData).call("e", self.re_sentence) # 调用js代码中的 e函数,传入参数为 inputData
print(sign)
return sign
def get_tran(self):
parameters_2 = {
"from": "en" if self.get_lg() == "en" else "zh",
"to": "zh" if self.get_lg() == "en" else "en",
"query": self.re_sentence,
"transtype": "enter",
"simple_means_flag": "3",
"sign": self.get_sign(),
"token": "6e30be2a0b1c9f99ea96980a659cf8ef",
"domain": "common"
}
req = requests.post(trans.url, data=parameters_2, headers=trans.headers)
req.encoding = "utf-8"
print(req)
return req.text
def out_put(self):
all_req = self.get_tran()
pat1 = '"dst":"[\\s\\S](.*?)"'
pat2 = ',"tran":"[\\s\\S]*?","def"'
res1 = re.search(pat1, str(all_req))
res2 = re.compile(pat2).findall(str(all_req))
print(str(res1))
print(str(res2))
res1_t = str(res1)
res1_t = res1_t.split('"')[-2]
print(type(res1_t))
t = res1_t
t = t.encode('utf8').decode('unicode_escape')
t = t.encode('utf8').decode('unicode_escape')
self.res_1 = t
print(self.res_1)
for item in res2:
print(item)
item = item.split('"')[-4]
item = item.encode('utf8').decode('unicode_escape')
print(item, type(item))
self.res_2.append(item)
root = Tk()
root.geometry("300x400+200+100")
root.title("英汉互译")
lil_transelll(root)
root.mainloop()
fy.js
放在和py文件同个目录下
var i = "320305.131321201"
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] || "") || "";
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)
}