python爬虫python 爬虫

爬虫破解js加密破解(二) 有道词典js加密参数 sign破解

2019-08-13  本文已影响84人  c067527d47c2

js破解的方式有:

一:把js代码翻译成Python或者java等代码。这个对于大部分的爬虫工程师是有难度的。因为爬虫偏向于后端的处理,很少有爬虫工程师去精通前端的知识,还有一点就是经过加密,混要,压缩的js代码阅读性很差的。即使是开发三五年的前端工程师,也很少能看懂的。更何况是没有搞过js的爬虫工程师呢?当然也有一些高手除外。

二: 执行js代码。可以使用Python的一些第三方库比如 pyv8,或者execjs去执行js代码。这个代码效率很高的。

三:使用selenium或者appiun等框架。强烈不建议使用。因为代码的稳定性和效率都很低。

有道词典参数破解分析流程:

第一步:我们在页面输入需要翻译的单词 好人。输出结果是 A good man。请求接口是 url= http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

输入参数如下图所示。

  image

第二部:遇到加密的请求参数,一般是去js代码里面找这个接口。

image

我们在 http://shared.ydstatic.com/fanyi/newweb/v1.0.15/scripts/newweb/fanyi.min.js文件中找到了 ajax请求接口。

image

格式化js代码:

找到核心代码如下:

image

加密过程找sign,如下:

image

最后一步。Python代码实现加密过程。

代码如下:

# coding:utf-8

# 破解js加密,版本2
'''
通过在js文件中查找salt或者sign,可以找到
1.可以找到这个计算salt的公式
r = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10))
2.sign:n.md5("fanyideskweb" + t + r + "p09@Bn{h02_BIEe]$P^nG");
md5 一共需要四个参数,第一个和第四个都是固定值得字符串,第三个是所谓的salt,
第二个参数是输入的需要翻译的单词
'''

import requests
import time, random
import requests
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
session = requests.session()




ts = str(int((time.time()*1000)))
salt = str(ts) + str(random.randint(0, 10))

print ts
print salt



def getmd5(v):
    import hashlib
    md5 = hashlib.md5()
    md5.update(v)
    sign = md5.hexdigest()
    return sign

def getSign(key, salt):

    sign = "fanyideskweb" + str(key) + str(salt) + "p09@Bn{h02_BIEe]$P^nG"
    sign = getmd5(sign)
    return sign

def youdao(key):

    url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    data = {
        "i":key,
        "from":"AUTO",
        "to":"AUTO",
        "smartresult":"dict",
        "client":"fanyideskweb",
        "salt": str(salt),
        "sign":getSign(key, salt),
        "ts":ts,
        "bv":"6074bfcb52fb292f0428cb1dd669cfb8",
        "doctype":"json",
        "version":"2.1",
        "keyfrom":"fanyi.web",
        "action":"FY_BY_REALTIME",
        "typoResult":"false",


    }
    headers = {

            "Host":"fanyi.youdao.com",
            # "Proxy-Connection":"keep-alive",
            "Content-Length":len(data),
            "Accept":"application/json, text/javascript, */*; q=0.01",
            "Origin":"http://fanyi.youdao.com",
            "X-Requested-With":"XMLHttpRequest",
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
            "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
            "Referer":"http://fanyi.youdao.com/",
            "Accept-Encoding":"gzip, deflate",
            "Accept-Language":"zh-CN,zh;q=0.9",
            "Cookie":"OUTFOX_SEARCH_USER_ID=119019685@10.168.8.63; JSESSIONID=aaaAioBu8RNDK46QQgoKw; OUTFOX_SEARCH_USER_ID_NCOO=585978009.1173552; UM_distinctid=1690e1aeb4938-0e3d396c4bdd96-551f3c12-100200-1690e1aeb4b7e; ___rl__test__cookies=1550723437154",


    }
    result =requests.post(url=url, data=data, headers=headers)
    print result.text



if __name__ == '__main__':
    youdao("好人")

输出结果:

image
上一篇下一篇

猜你喜欢

热点阅读