cookie python 解密_方法教程 | Python爬虫JS逆向解密详解

    “1、网页查看,2、有道翻译简单实现源码,3、JS解密(详解),4、python实现JS解密后的完整代码,4.1、实现效果,5、JS解密后完整代码升级版,5.1、实现效果!

daddd3d2fe4cef9aff372d6a49933f4b.png

1、网页查看

02b7099843d965c8c6964c76d76e497d.png

57a24feaa8f8a0795a50cfdd3ad1ab92.png

b78f0631b59fb7c8218b5b8ba3156148.png

f87590379e5df41539b775f3be8c94c5.png

1f19d50a933c70c7d4aa56aff23d0743.png

2、有道翻译简单实现源码

import requests#请求头#headers不能只有一个User-Agent,因为有道翻译是有一定的反扒机制的,所以我们直接全部带上headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "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/84.0.4147.125 Safari/537.36",    "X-Requested-With": "XMLHttpRequest",}#提交参数params = {    "i": "I love you",    "from": "UTO",    "to": "AUTO",    "smartresult": "dict",    "client": "fanyideskweb",    "salt": "15975022964104",    "sign": "7b7db70e0d1a786a43a6905c0daec508",    "lts": "1597502296410",    "bv": "9ef72dd6d1b2c04a72be6b706029503a",    "doctype": "json",    "version": "2.1",    "keyfrom": "fanyi.web",    "action": "FY_BY_REALTlME",}url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"#发起POST请求response = requests.post(url=url,headers=headers,data=params).json()print(response)

29c9fbaae4d2d194ac125e600b3321ee.png

    到这里表面上已经完成了有道翻译的代码,但其实还有问题,比如下方如果换了需要翻译的内容就会报错!

7e84616371a6f0fccbb488e4847ef551.png

09554c2006da40d2e8692bb12a633631.png

原因

    我们在有道翻译重新翻译,会发起新的POST请求,而每次请求所带的参数值会有所不同,如果想要真正实现有道翻译功能,就要找到这四个参数值的生成方式,然后用python 实现同样的功能才行。

b9d12e82c68ca49c31519e202d3b77ae.png

3、JS解密(详解)

    Ctrl+Shift+f进行搜索,输入sign

b4af2bd24c5058852e9058b0b8146e6b.png

9a5f9eb0e66371c5eb612c8782c18c61.png

     因为加密肯定是发起请求的时候加密,所有我们搜索 translate_o

1b350acdfba004f6615837365c523b6f.png

c70dbf0989ba7a191dd4a5f0533e91df.png

     调试

13dc431fd2249b5054496f1d96bb4207.png

          在有道翻译重新输入翻译内容,即可到断点处停止。

0e6ce206fd855cb995794d96841a2ab1.png

    但是发现数据已经是加密好了的。

ff38da28fd2474302ad1d9a630c31565.png

    但由于我们是调试模式,可以返回到上一步,点击如下按钮。

98b0c8f201bb3d4e6035f63cc22b4cff.png

     可以发现salt、sign、Its、bv都是通过r获取出来的,而r又是通过一个函数得到的。

722a3b7734408b401c30c182a760f049.png

        进入该函数

4c0a8e529ca633d000b3cde1cfc1df3e.png

    可以发现这里就是加密的地方

    复制这段js代码,我们需要使用python代码来实现。

aee2330e67d27be7c37595b5ad78bb73.png

2fe0e5451e698b314c0d65934aaaa8a2.png

    可以看到是一模一样的,到这里算是有一点点小成功了。

a93bff492e5f65cc318af0004c55f54f.png

    注意这里翻译内容不同其bv也是不同的。

接下来看its,用Python实现

b948fb6a291f81b7e2c7ff1a81b767a1.png

     可见Python生成的时间戳和JS的有所不同,但细心的小伙伴肯定知道怎么把python的时间戳变成跟JS一样。

6f672dc44fc0b1dd577509733bf456f8.png

    这就ok了!

乘以1000转化为int舍弃小数位再转化为字符串,因为JS里是字符串

51f6031d5742b35b997e90243468ffa2.png

      接下来看i,然后用python实现

766fae488a32a9ed5b74820bb4065c9f.png

aa2a2a246aceb3cd4f35cd6a1fceffbc.png

     最后

874761706890a7fff64ed70b86b776e0.png

温馨提示:

f01bce68a2cc5d3dd951f0467ef03a27.png

    可能会正在有道翻译更新时进行改变,但这不是什么问题,如果仔细看了JS解密的话,还是能够找到新的。

4、python实现JS解密后的完整代码

import requestsfrom hashlib import md5import timeimport random#请求地址url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"appVersion = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "Host": "fanyi.youdao.com",    "Origin": "http://fanyi.youdao.com",    "Referer": "http://fanyi.youdao.com/",    "user-agent": appVersion,    "X-Requested-With": "XMLHttpRequest",}def r(e):    # bv    t = md5(appVersion.encode()).hexdigest()    # lts    r = str(int(time.time() * 1000))    # i    i = r + str(random.randint(0,9))    return {        "ts": r,        "bv": t,        "salt": i,        "sign": md5(("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m").encode()).hexdigest()    }def fanyi(word):    data = r(word)    params = {        "i": word,        "from": "UTO",        "to": "AUTO",        "smartresult": "dict",        "client": "fanyideskweb",        "salt": data["salt"],        "sign": data["sign"],        "lts": data["ts"],        "bv": data["bv"],        "doctype": "json",        "version": "2.1",        "keyfrom": "fanyi.web",        "action": "FY_BY_REALTlME",    }    response = requests.post(url=url,headers=headers,data=params)    #返回json数据    return response.json()if __name__ == "__main__":    while True:        word = input("请输入要翻译的语句:")        result = fanyi(word)        #对返回的json数据进行提取,提取出我们需要的数据        r_data = result["translateResult"][0]        print(r_data[0]["src"])        print(r_data[0]["tgt"])
4.1实现效果

dc76b978b327ad2e0a38cd5d2f2345a9.png

5、JS解密后完整代码升级版
import requestsfrom hashlib import md5import timeimport random#请求地址url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"appVersion = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"headers = {    "Accept": "application/json, text/javascript, */*; q=0.01",    "Accept-Encoding": "gzip, deflate",    "Accept-Language": "zh-CN,zh;q=0.9",    "Connection": "keep-alive",    "Content-Length": "244",    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",    "Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",    "Host": "fanyi.youdao.com",    "Origin": "http://fanyi.youdao.com",    "Referer": "http://fanyi.youdao.com/",    "user-agent": appVersion,    "X-Requested-With": "XMLHttpRequest",}def r(e):    # bv    t = md5(appVersion.encode()).hexdigest()    # lts    r = str(int(time.time() * 1000))    # i    i = r + str(random.randint(0,9))    return {        "ts": r,        "bv": t,        "salt": i,        "sign": md5(("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m").encode()).hexdigest()    }def fanyi(word):    data = r(word)    params = {        "i": word,        "from": "UTO",        "to": "AUTO",        "smartresult": "dict",        "client": "fanyideskweb",        "salt": data["salt"],        "sign": data["sign"],        "lts": data["ts"],        "bv": data["bv"],        "doctype": "json",        "version": "2.1",        "keyfrom": "fanyi.web",        "action": "FY_BY_REALTlME",    }    response = requests.post(url=url,headers=headers,data=params)    return response.json()if __name__ == "__main__":  #打开需要翻译的文章    with open("文章.txt",mode="r",encoding="utf-8") as f:        #获取文章全部内容        text = f.read()    result = fanyi(text)    r_data = result["translateResult"]    #翻译结果保存    with open("test.txt",mode="w",encoding="utf-8") as f:        for data in r_data:            f.write(data[0]["tgt"])            f.write('\n')            f.write(data[0]["src"])            f.write('\n')            print(data[0]["tgt"])            print(data[0]["src"])
5.1、实现效果

1bf36a1079587f7ff6e56437bd77587c.png

 这是保存下来的JS解密代码以上为我Python爬虫JS解密详解用到的手段,如有不足之处或更多技巧,欢迎指教补充。愿本文的分享对您之后爬虫JS解密有所帮助。谢谢~

编辑排版:筱筱   原创:Code皮皮虾

be7d17a8b5b666a6e358b2b17266bb0e.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值