有道翻译接口-js解析
一、分析接口
二、判断参数
请求两次分析参数变化 判断需要解析的参数
由图片可知 变化的参数为 salt、sign、its
三、找到断点
方法一:
通过堆栈寻找使用到的js
方法二:
search全局搜索
展示断点
调试,分析参数含义
一、调试
搭上断点后通过引起页面变化激活断点 一步步调试 可知
e:需要翻译的文字
r:时间戳
i时间戳+随机数字
ts:时间戳
salt:时间戳+随机1-10
sign:“fanyideskweb” + 翻译文字 + salt + “Tbh5E8=q6U3EXe+&L[4c@”
至此 解析完毕
写代码
var r = function(e) {
// var t = n.md5(navigator.appVersion)
var r = "" + (new Date).getTime()
, i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
// bv: t,
salt: i,
sign: "fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"
}
};
ret = r('你真帅')
console.log(ret)
import random
import time
import requests
import execjs
import hashlib
def get_salt(info):
# def get_m_info(page):
with open('youdao.js', "r") as f:
prob_js = f.read()
docjs = execjs.compile(prob_js)
ret = docjs.call('r', info)
return ret
def main():
url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
"Cookie": "OUTFOX_SEARCH_USER_ID=-1554138040@10.169.0.84; JSESSIONID=aaapW9aLopu_9fyHTpkJx; OUTFOX_SEARCH_USER_ID_NCOO=1493641069.5893097; ___rl__test__cookies=1618814880882",
"Referer": "https://fanyi.youdao.com/"
}
salt_dict = get_salt(word)
md5 = hashlib.md5()
md5.update(salt_dict.get('sign').encode())
sign = md5.hexdigest()
print(salt_dict)
data = {
"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
'salt': salt_dict.get('salt'),
'sign': sign,
'lts': salt_dict.get('ts'),
'bv': 'b286f0a34340b928819a6f64492585e8',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
response = requests.post(url, headers=headers, data=data)
print(response.json())
if __name__ == '__main__':
word = '哇哈哈'
main()