有道翻译js破解

有道翻译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)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值