在上一篇 爬取有道翻译 的基础上来进行本次百度翻译的破解
前面步骤不变,就不在赘述了。
直接跳到找fromdata里的sign元素
前面分析可以知道 变的只有sign和token,token可以直接获取,使用我们重点放在sign
同样的先全局查找,在逐个分析,然后内部查找,最后逐步分析到上图所示,打断点运行,发现e就是传入的word,把光标放在L上,点击上面提示的f进行跳转
我们把这个函数体直接复制下来,存储到js文件中`,然后用import execjs库对其进行分析,就可以得到sign的值
import execjs
def getSign(word):
with open("baidufanyi.js", "r", encoding='utf8') as f:
jscode = f.read()
sign = execjs.compile(jscode).call('e', word)
return sign
但是我们要把js里的内容补齐,否则会一直报错未定义,还需要一个i和一个函数n,读者可以自己尝试找一下。
最后附完整代码
import requests
import execjs
def getSign(word):
with open("baidufanyi.js", "r", encoding='utf8') as f:
jscode = f.read()
sign = execjs.compile(jscode).call('e', word)
return sign
def request(word):
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '136',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'BIDUPSID=602A11E252B731A9757622309C3F89E5; PSTM=1626349844; BAIDUID=602A11E252B731A9D017D8914C6CF71D:FG=1; __yjs_duid=1_70ff7d08f671b7667da8a108172284571626349912834; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; FANYI_WORD_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BAIDUID_BFESS=602A11E252B731A9D017D8914C6CF71D:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; PSINO=3; H_PS_PSSID=34644_34067_34549_33848_34600_34584_26350_34627_34420_34469_34691; BA_HECTOR=21ah212l852l808lab1gkd6ij0q; BCLID=7900992051927074863; BDSFRCVID=2PLOJexroG0YyxOHO7bjhKIR3_weG7bTDYLtOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKKLgOTHULF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tR3aQ5rtKRTffjrnhPF3Dl8TXP6-hnjy3bRkX4nvWpAbHRcdyUrCDp4Wbttf5q3RymJJ2-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvX--g3-7PWU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIE3-oJqCDhMC-93D; BCLID_BFESS=7900992051927074863; BDSFRCVID_BFESS=2PLOJexroG0YyxOHO7bjhKIR3_weG7bTDYLtOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKKLgOTHULF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tR3aQ5rtKRTffjrnhPF3Dl8TXP6-hnjy3bRkX4nvWpAbHRcdyUrCDp4Wbttf5q3RymJJ2-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvX--g3-7PWU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIE3-oJqCDhMC-93D; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1631951765,1631951802,1631952172,1632016982; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1632016982; __yjs_st=2_M2I0MjI3ZTEwM2UyZjAwZDJhYjljMDdhNGFiNDhkZTg0OWNmZjZjNDI1ZDAwZmUxZDllNDkyYjczOWE5NzhkYjY0ZmE2NjdhMDkzZGNmMmJlODQ1MjcwOWQwOTBiY2E5YTA0MmZiNGQyYzU1NDgwYTIzZTVkNWZmMjUxNDViZjRiNGU0OWY3MmYwZTUxNmFmODRmMzJhN2JhN2RjNDY2YmU4ZGEyZDA2M2JhZWUzMjRiZThjNzI0NDU4OWRkZDhmYjdhZDdiZWRiMmJiY2IzMmM1NmI0YjBmMjBlNjA5M2E4NjQ4ZGM4ZmU2MDVkMzM0NzMzMjI4YTk4MTBhMmFlNV83XzllYzQwNTlj; ab_sr=1.0.1_NmU4Y2M3NGRiY2U3YWFiZjlkNDNjMjI2YjZkN2YwNTYyNDc2OTEyY2ZkY2FhZTJjMzU4YjVlZjk5NDZmZDMxOWRmZTJkMzM0YmNkNTY1MGI2MWFiMDEzMjRiY2FhNWRlZTFjN2Y2OTg0OTBlMjFhYzBlYmM1MDMzNzBlYmJkMmFmYzNhZjVhOGM4YmE2ODdjN2U4NmQ5MjE5Y2NiM2E4ZQ==',
'Host': 'fanyi.baidu.com',
'Origin': 'https://fanyi.baidu.com',
'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh',
'sec-ch-ua': '"Google Chrome";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
sign = getSign(word)
data = {
'from': 'en' if word[0].upper() in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'
, 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z'] else 'zh',
'to': 'zh' or 'en',
'query': word,
'transtype': 'realtime',
'simple_means_flag': 3,
'sign': sign, # '63766.268839'
'token': 'ceef41c83fe0d714278e1d1dca80a510',
'domain': 'common'
}
response = requests.post(url, headers=headers, data=data).json()
print(response['trans_result']['data'][0]['dst'])
if __name__ == '__main__':
word = input("请输入翻译元素:")
request(word)
js的文件自己找找看。。。。。。。