本文用到的网址为有道翻译你好
按照惯例先打开开发者工具,按ctrl+f键搜索信息,搜到的太多了,因此一条条看网页,看到下面的内容,分析出来这个可能最大,看携带的信息,q就是要翻译的东西,le是翻译方式,t无所谓,client就是通过什么平台翻译的,sign应该是加密参数,keyfrom和client差不多,下一步就是要解密sign,通过全局搜索sign
搜索结果不多,逐个点击查看。
下面是页面中涉及到sign的内容,再分析这个大函数
function x() {
return (x = Object(o.a)(regeneratorRuntime.mark((function t(e) {
var time, r, o, n, f, l;
return regeneratorRuntime.wrap((function (t) {
for (; ;)
switch (t.prev = t.next) {
case 0:
return time = "".concat(e.text).concat(w).length % 10,
r = "".concat(e.text).concat(w),
o = h(r),
n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
f = h(n),
l = {
q: e.text,
le: e.le,
t: time,
client: "web",
sign: f,
keyfrom: w
},
t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));
case 7:
case "end":
return t.stop()
}
}
), t)
}
)))).apply(this, arguments)
}
最有用的是下面这一部分,通过打断点看具体信息,其中w是"webdict",e.text是要翻译的内容,e.le是要翻译成什么语言,再看h函数,点进去
switch (t.prev = t.next) {
case 0:
return time = "".concat(e.text).concat(w).length % 10,
r = "".concat(e.text).concat(w),
o = h(r),
n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
f = h(n),
l = {
q: e.text,
le: e.le,
t: time,
client: "web",
sign: f,
keyfrom: w
},
t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));
case 7:
case "end":
return t.stop()
}
case
0
:
return time = "".concat(e.text).concat(w).length % 10,
r = "".concat(e.text).concat(w),
o = h(r),
n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
f = h(n),
l = {
q: e.text,
le: e.le,
t: time,
client: "web",
sign: f,
keyfrom: w
},
t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));
h函数就是一个md5加密,模仿一下就好了
h = function (t) {
return m.a.createHash("md5").update(t.toString()).digest("hex")
};
下面是完整的python代码
import hashlib
import requests
import json
def generate_md5_hash(text):
md5_object = hashlib.md5()
md5_object.update(text.encode('utf-8'))
return md5_object.hexdigest()
def x(text):
w='webdict'
str = 'Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu'
st='web'
time = len(text + w) % 10
r = text + w
o = generate_md5_hash(r)
n = f"{st}{text}{time}{str}{o}"
f = generate_md5_hash(n)
l = {
"q": text,
"le": "en",
"t": time,
"client": "web",
"sign": f,
"keyfrom": w
}
try:
response = requests.post('https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4',
data=l,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",})
result = response.json()
return result
except requests.RequestException as e:
print(f'请求出错: {e}')
return None
if __name__ == "__main__":
result = x('你好')
print(result)
感谢点赞,本文仅限于技术分析学习