1. 1、发送两次请求
    2. 第一次:
    3. i: 翻译
    4. from: AUTO
    5. to: AUTO
    6. smartresult: dict
    7. client: fanyideskweb
    8. salt: 16546063945256
    9. sign: 1637db111b0b74422e75a2e0f4be0361
    10. lts: 1654606394525
    11. bv: a6b36904bd1a38729b798f9a67c14dd9
    12. doctype: json
    13. version: 2.1
    14. keyfrom: fanyi.web
    15. action: FY_BY_CLICKBUTTION
    16. 第二次请求:
    17. i: 学习
    18. from: AUTO
    19. to: AUTO
    20. smartresult: dict
    21. client: fanyideskweb
    22. salt: 16546064668692
    23. sign: 82b8f5715172d81c626bd28625e5e005
    24. lts: 1654606466869
    25. bv: a6b36904bd1a38729b798f9a67c14dd9
    26. doctype: json
    27. version: 2.1
    28. keyfrom: fanyi.web
    29. action: FY_BY_CLICKBUTTION
    30. 通过对比不同请求的表单参数,发现salt,signlts三个参数是变化的。
    31. 根据变化的三个参数找到对应的加密方式
    1. e = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
    2. navigator = {
    3. // WT-JS_DEBUG
    4. appCodeName: "Mozilla",
    5. appMinorVersion: "0",
    6. appName: "Netscape",
    7. appVersion: "5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    8. browserLanguage: "zh-CN",
    9. cookieEnabled: true,
    10. cpuClass: "x86",
    11. language: "zh-CN",
    12. maxTouchPoints: 0,
    13. msManipulationViewsEnabled: true,
    14. msMaxTouchPoints: 0,
    15. msPointerEnabled: true,
    16. onLine: true,
    17. platform: "Win32",
    18. pointerEnabled: true,
    19. product: "Gecko",
    20. systemLanguage: "zh-CN",
    21. userAgent: "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    22. userLanguage: "zh-CN",
    23. vendor: "",
    24. vendorSub: "",
    25. webdriver: false
    26. }, window = this, window.navigator = navigator;
    27. var n = function(e, t) {
    28. return e << t | e >>> 32 - t
    29. }
    30. , r = function(e, t) {
    31. var n, r, i, o, a;
    32. return i = 2147483648 & e,
    33. o = 2147483648 & t,
    34. n = 1073741824 & e,
    35. r = 1073741824 & t,
    36. a = (1073741823 & e) + (1073741823 & t),
    37. n & r ? 2147483648 ^ a ^ i ^ o : n | r ? 1073741824 & a ? 3221225472 ^ a ^ i ^ o : 1073741824 ^ a ^ i ^ o : a ^ i ^ o
    38. }
    39. , i = function(e, t, n) {
    40. return e & t | ~e & n
    41. }
    42. , o = function(e, t, n) {
    43. return e & n | t & ~n
    44. }
    45. , a = function(e, t, n) {
    46. return e ^ t ^ n
    47. }
    48. , s = function(e, t, n) {
    49. return t ^ (e | ~n)
    50. }
    51. , l = function(e, t, o, a, s, l, c) {
    52. return e = r(e, r(r(i(t, o, a), s), c)),
    53. r(n(e, l), t)
    54. }
    55. , c = function(e, t, i, a, s, l, c) {
    56. return e = r(e, r(r(o(t, i, a), s), c)),
    57. r(n(e, l), t)
    58. }
    59. , u = function(e, t, i, o, s, l, c) {
    60. return e = r(e, r(r(a(t, i, o), s), c)),
    61. r(n(e, l), t)
    62. }
    63. , d = function(e, t, i, o, a, l, c) {
    64. return e = r(e, r(r(s(t, i, o), a), c)),
    65. r(n(e, l), t)
    66. }
    67. , f = function(e) {
    68. 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; )
    69. a = s % 4 * 8,
    70. o[t = (s - s % 4) / 4] = o[t] | e.charCodeAt(s) << a,
    71. s++;
    72. return t = (s - s % 4) / 4,
    73. a = s % 4 * 8,
    74. o[t] = o[t] | 128 << a,
    75. o[i - 2] = n << 3,
    76. o[i - 1] = n >>> 29,
    77. o
    78. }
    79. , p = function(e) {
    80. var t, n = "", r = "";
    81. for (t = 0; t <= 3; t++)
    82. n += (r = "0" + (e >>> 8 * t & 255).toString(16)).substr(r.length - 2, 2);
    83. return n
    84. }
    85. , h = function(e) {
    86. e = e.replace(/\x0d\x0a/g, "\n");
    87. for (var t = "", n = 0; n < e.length; n++) {
    88. var r = e.charCodeAt(n);
    89. if (r < 128)
    90. t += String.fromCharCode(r);
    91. else if (r > 127 && r < 2048)
    92. t += String.fromCharCode(r >> 6 | 192),
    93. t += String.fromCharCode(63 & r | 128);
    94. else if (r >= 55296 && r <= 56319) {
    95. if (n + 1 < e.length) {
    96. var i = e.charCodeAt(n + 1);
    97. if (i >= 56320 && i <= 57343) {
    98. var o = 1024 * (r - 55296) + (i - 56320) + 65536;
    99. t += String.fromCharCode(240 | o >> 18 & 7),
    100. t += String.fromCharCode(128 | o >> 12 & 63),
    101. t += String.fromCharCode(128 | o >> 6 & 63),
    102. t += String.fromCharCode(128 | 63 & o),
    103. n++
    104. }
    105. }
    106. } else
    107. t += String.fromCharCode(r >> 12 | 224),
    108. t += String.fromCharCode(r >> 6 & 63 | 128),
    109. t += String.fromCharCode(63 & r | 128)
    110. }
    111. return t
    112. };
    113. function md5(e) {
    114. var t, n, i, o, a, s, m, g, v, y = Array();
    115. for (e = h(e),
    116. y = f(e),
    117. s = 1732584193,
    118. m = 4023233417,
    119. g = 2562383102,
    120. v = 271733878,
    121. t = 0; t < y.length; t += 16)
    122. n = s,
    123. i = m,
    124. o = g,
    125. a = v,
    126. s = l(s, m, g, v, y[t + 0], 7, 3614090360),
    127. v = l(v, s, m, g, y[t + 1], 12, 3905402710),
    128. g = l(g, v, s, m, y[t + 2], 17, 606105819),
    129. m = l(m, g, v, s, y[t + 3], 22, 3250441966),
    130. s = l(s, m, g, v, y[t + 4], 7, 4118548399),
    131. v = l(v, s, m, g, y[t + 5], 12, 1200080426),
    132. g = l(g, v, s, m, y[t + 6], 17, 2821735955),
    133. m = l(m, g, v, s, y[t + 7], 22, 4249261313),
    134. s = l(s, m, g, v, y[t + 8], 7, 1770035416),
    135. v = l(v, s, m, g, y[t + 9], 12, 2336552879),
    136. g = l(g, v, s, m, y[t + 10], 17, 4294925233),
    137. m = l(m, g, v, s, y[t + 11], 22, 2304563134),
    138. s = l(s, m, g, v, y[t + 12], 7, 1804603682),
    139. v = l(v, s, m, g, y[t + 13], 12, 4254626195),
    140. g = l(g, v, s, m, y[t + 14], 17, 2792965006),
    141. m = l(m, g, v, s, y[t + 15], 22, 1236535329),
    142. s = c(s, m, g, v, y[t + 1], 5, 4129170786),
    143. v = c(v, s, m, g, y[t + 6], 9, 3225465664),
    144. g = c(g, v, s, m, y[t + 11], 14, 643717713),
    145. m = c(m, g, v, s, y[t + 0], 20, 3921069994),
    146. s = c(s, m, g, v, y[t + 5], 5, 3593408605),
    147. v = c(v, s, m, g, y[t + 10], 9, 38016083),
    148. g = c(g, v, s, m, y[t + 15], 14, 3634488961),
    149. m = c(m, g, v, s, y[t + 4], 20, 3889429448),
    150. s = c(s, m, g, v, y[t + 9], 5, 568446438),
    151. v = c(v, s, m, g, y[t + 14], 9, 3275163606),
    152. g = c(g, v, s, m, y[t + 3], 14, 4107603335),
    153. m = c(m, g, v, s, y[t + 8], 20, 1163531501),
    154. s = c(s, m, g, v, y[t + 13], 5, 2850285829),
    155. v = c(v, s, m, g, y[t + 2], 9, 4243563512),
    156. g = c(g, v, s, m, y[t + 7], 14, 1735328473),
    157. m = c(m, g, v, s, y[t + 12], 20, 2368359562),
    158. s = u(s, m, g, v, y[t + 5], 4, 4294588738),
    159. v = u(v, s, m, g, y[t + 8], 11, 2272392833),
    160. g = u(g, v, s, m, y[t + 11], 16, 1839030562),
    161. m = u(m, g, v, s, y[t + 14], 23, 4259657740),
    162. s = u(s, m, g, v, y[t + 1], 4, 2763975236),
    163. v = u(v, s, m, g, y[t + 4], 11, 1272893353),
    164. g = u(g, v, s, m, y[t + 7], 16, 4139469664),
    165. m = u(m, g, v, s, y[t + 10], 23, 3200236656),
    166. s = u(s, m, g, v, y[t + 13], 4, 681279174),
    167. v = u(v, s, m, g, y[t + 0], 11, 3936430074),
    168. g = u(g, v, s, m, y[t + 3], 16, 3572445317),
    169. m = u(m, g, v, s, y[t + 6], 23, 76029189),
    170. s = u(s, m, g, v, y[t + 9], 4, 3654602809),
    171. v = u(v, s, m, g, y[t + 12], 11, 3873151461),
    172. g = u(g, v, s, m, y[t + 15], 16, 530742520),
    173. m = u(m, g, v, s, y[t + 2], 23, 3299628645),
    174. s = d(s, m, g, v, y[t + 0], 6, 4096336452),
    175. v = d(v, s, m, g, y[t + 7], 10, 1126891415),
    176. g = d(g, v, s, m, y[t + 14], 15, 2878612391),
    177. m = d(m, g, v, s, y[t + 5], 21, 4237533241),
    178. s = d(s, m, g, v, y[t + 12], 6, 1700485571),
    179. v = d(v, s, m, g, y[t + 3], 10, 2399980690),
    180. g = d(g, v, s, m, y[t + 10], 15, 4293915773),
    181. m = d(m, g, v, s, y[t + 1], 21, 2240044497),
    182. s = d(s, m, g, v, y[t + 8], 6, 1873313359),
    183. v = d(v, s, m, g, y[t + 15], 10, 4264355552),
    184. g = d(g, v, s, m, y[t + 6], 15, 2734768916),
    185. m = d(m, g, v, s, y[t + 13], 21, 1309151649),
    186. s = d(s, m, g, v, y[t + 4], 6, 4149444226),
    187. v = d(v, s, m, g, y[t + 11], 10, 3174756917),
    188. g = d(g, v, s, m, y[t + 2], 15, 718787259),
    189. m = d(m, g, v, s, y[t + 9], 21, 3951481745),
    190. s = r(s, n),
    191. m = r(m, i),
    192. g = r(g, o),
    193. v = r(v, a);
    194. return (p(s) + p(m) + p(g) + p(v)).toLowerCase()
    195. }
    196. function youdao(e){
    197. var t = md5(navigator.appVersion)
    198. , r = "" + (new Date).getTime()
    199. , i = r + parseInt(10 * Math.random(), 10);
    200. return {
    201. ts: r,
    202. bv: t,
    203. salt: i,
    204. sign: md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")
    205. }
    206. }
    1. import requests
    2. import execjs
    3. def get_js(file_name,fun_name,fun_args=None):
    4. with open(file_name,'r',encoding='utf-8') as fileObj:
    5. js_code = fileObj.read() # 读取js文件
    6. cjs = execjs.compile(js_code) # 编译js文件
    7. return cjs.call(fun_name,fun_args) # 执行js代码
    8. if __name__ == '__main__':
    9. keyword = input('请输入要翻译的词')
    10. data_dict = get_js('youdao.js','youdao',keyword)
    11. data_dict['i'] = keyword
    12. data_dict['from'] = 'AUTO'
    13. data_dict['to'] = 'AUTO'
    14. data_dict['smartresult'] = 'dict'
    15. data_dict['client'] = 'fanyideskweb'
    16. data_dict['doctype'] = 'json'
    17. data_dict['version'] = '2.1'
    18. data_dict['keyfrom'] = 'fanyi.web'
    19. data_dict['action'] = 'FY_BY_CLICKBUTTION'
    20. header = {
    21. 'Cookie':'OUTFOX_SEARCH_USER_ID=-1833641449@10.110.96.157; OUTFOX_SEARCH_USER_ID_NCOO=623439161.6505197; fanyi-ad-id=306808; fanyi-ad-closed=1; ___rl__test__cookies=1654831346964',
    22. 'Referer':'https://fanyi.youdao.com/',
    23. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
    24. }
    25. url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    26. result = requests.post(url,data=data_dict,headers=header)
    27. print(result.json())