有道翻译JS破解, 看一下思路就可以.
今天来攻克一下js加密的网站 ,由于我也是刚开始学, 总免不了四处碰壁, 看网上的教
程尝试着破解了几个网站 ,都是最简单的学爬虫破解js的基础网址, 比如谷歌镜像 , 有道翻译, 这两个都可以直接使用python代码模拟执行, 所以说比较简单, 下面介绍的是有道翻译破解, 不同于其他, 我用的是异步的方式, 写完的感觉是10行代码能解决的问题我愣是用了100行, 不建议用,下面是代码 , 思路就是1. 抓包同时点击翻译 2. 找到post请求要的参数, 3. 在js文件中找到参数, 至于怎么找, 我是一个一个js文件查找的, 有同学知道如何快速定位加密的js代码还请告知!在下不胜感激。
import hashlib, time, asyncio, random, aiohttp
# 必须加上请求头
headers = {
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,eu;q=0.7,eo;q=0.6',
'Connection':'keep-alive',
'Content-Length':'242',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie':'OUTFOX_SEARCH_USER_ID=118452452@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=8640035.704335434; UM_distinctid=16b46fe638ea5-007c21e0c9cd04-e353165-100200-16b46fe638f1ea; _ntes_nnid=48895a5dcd4db1caae23c7a45c5a2b28,1560563984307; _ga=GA1.2.1186284290.1563375042; JSESSIONID=aaahTw8_Y4Q8K8LkZkTYw; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcsQKvyTa-b0hdFllTYw; ___rl__test__cookies=1566273541573',
'Host':'fanyi.youdao.com',
'Origin':'http://fanyi.youdao.com',
'Referer':'http://fanyi.youdao.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
'X-Requested-With':'XMLHttpRequest',
}
class YoudaoFaiyi(object):
def __init__(self):
self.ua = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
async def md5_hashlib(self, string):
string = string.encode('utf-8')
md5 = hashlib.md5(string).hexdigest()
return md5
async def get_sign(self, e, i):
sign_string = "fanyideskweb" + e + i + "n%A-rKaT5fb[Gy?;N5@Tj"
return await youdao.md5_hashlib(sign_string)
async def get_i(self, r):
i = r + str(random.randint(0, 10))
return i
async def get_r(self):
r = str(int(time.time() * 1000))
return r
async def get_result(self):
data = {
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'i' : e,
'salt': i,
'sign': sign,
'ts': r,
'bv': bv,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_CLICKBUTTION',
}
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
async with aiohttp.ClientSession() as session:
async with session.post(url, data=data, headers=headers) as resp:
try:
import json
result = await resp.text(encoding='utf-8')
result = json.loads(result)
tgt = result.get('translateResult')[0][0].get('tgt')
src = result.get('translateResult')[0][0].get('src')
result2 = " ".join(result.get('smartResult').get('entries'))
item = {
'translation': tgt,
'word': src,
'smart_explaination': result2
}
items = item.items()
item_list = []
for _item in items:
item_list.append(_item[1])
return item_list
except UnicodeError:
return await resp.text(encoding="GBK")
async def get_bv_ua(self):
return await youdao.md5_hashlib(self.ua)
async def main(self):
youdao = YoudaoFaiyi()
task = youdao.get_r()
return await asyncio.wait_for(task, timeout=100)
if __name__ == '__main__':
while True:
youdao = YoudaoFaiyi()
loop = asyncio.get_event_loop()
r = loop.run_until_complete(youdao.main())
task = youdao.get_i(r) # 获取i
i = loop.run_until_complete(task)
e = input("输入要翻译的单词: ")
if e == 'q':
break
sign = loop.run_until_complete(asyncio.wait_for(youdao.get_sign(e, i),timeout=100))
bv = loop.run_until_complete(asyncio.wait_for(youdao.get_bv_ua(), timeout=100))
result = loop.run_until_complete(asyncio.wait_for(youdao.get_result(), timeout=100))
for res in result:
print(res)