失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 不会JS逆向还说自己是爬虫人?从负(负基础)开是逆向JS有道翻译

不会JS逆向还说自己是爬虫人?从负(负基础)开是逆向JS有道翻译

时间:2019-06-13 08:03:49

相关推荐

不会JS逆向还说自己是爬虫人?从负(负基础)开是逆向JS有道翻译

引言-啥是JS逆向?:

这个问题我在网上搜过,答案大多都似是而非😦,很多都是关于JS加密的释译😨.在这里解释一下,大概就是反JS做的反爬,也就是说,它属于反反爬的一种,但难度又略高于普通的反反爬

1,它JS加密在哪了2,人家加密了,这可咋整-思路3,开干4,源码

1,它加密在哪了

有句话叫你只有知道自己是咋凉的才知道自己要咋搞,那小编先带大家凉一次试试(当然这里的凉指的不是从入门到入土为安😝,而是总结经验痛定思痛),先看一下正常人的脑回路:

(1)导入库:import requests

(2)确定api:url='/translate_o?smartresult=dict&smartresult=rule'

(3)定制请求头:

headers={

'Cookie': 'OUTFOX_SEARCH_USER_ID=79467041@10.108.160.102; JSESSIONID=aaaYcfsIiH6Eq9tgeJY4x; OUTFOX_SEARCH_USER_ID_NCOO=1993965922.0769746; ___rl__test__cookies=1641525568356',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',

"Referer": "/"

}

(3)post传参:#参数复制既可,此处略,将参数封装在data的容器里,

a=requests.post(url,headers=headers,params=params)

输出一下:print(a.text)

此时读者是不是感觉好像发现了什么又好像没发现什么.看看输出的是什么?{errorCode:50}

是的😁,人家设JS反爬了,我们并没有得到想要的翻译结果,它设的反爬有个优雅的名称叫JS混淆加密,说白了就是把参数加密一下,让参数一会一变😎,如果你的参数和正确参数对不上,那不好意思,服务器就会识别出你是爬虫,开始针对你,也就是说你复制过来的参数之前能用现在可能就不能用了,复制粘贴的方法变得不靠谱了,就问你现在气不气

2,那咋办呢-思路

针锋相对嘛.人家针对你你也可以针对人家嘛.找到人家变化的规律,那根据参数得到的结果不就能和人家服务器设置的参数对上了吗.我们可以先翻译几次看看,比较出来加密的参数(为了让读者上手实践,这里就不发图片了).果然,经过比较我们发现了几个比较鸡贼的参数,分别salt,sign,lts,知道了问题在哪那剩下的就只有干了呀😜

通过观察我们发现了:

its:当前豪秒单位的时间戳.

salt:当前时间戳加一个随机数

sign:"fanyideskweb" + str(content) + str(salt) + ""结合md5加密所生成的加密值

准备条件都凑齐了,那还等啥, 开干呗

3,开干

获取lts值:time_=str(int(time.time()*1000))

获取salt值:time_salt=time_+str(random.randint(0,10))

定义一个翻译侠为我们翻译:fanyi=input("帅哥美女,别光顾着改bug呀😄,把不会的单词写下来吧:")

获取sign值:a=fanyideskweb" + str(fanyi) + str(salt) + "]BjuETDhU)zqSxf-=B#7m"

sign=hashlib.md5(a.encode()).hexdigest()#进行md5加密生成sign值(在此之前需要先导入hashlib库)

接下来进行post传参:form_data = {

"i": fanyi, # 要被翻译的数据

"from": "AUTO",

"to": "AUTO",

"smartresult": "dict",

"client": "fanyideskweb",

"salt": time_salt, # 以毫秒为单位的时间戳 + 随机数字

"sign": sign, # 未知的js加密后的数据

"lts": time_, # 以毫秒为单位的时间戳

"bv": "4abf2733c66fbf953861095a23a839a8",

"doctype": "json",

"version": "2.1",

"keyfrom": "fanyi.web",

"action": "FY_BY_REALTlME",

}

re = requests.post(url,headers=headers,params=form_data)

接下来对请求来的信息的信息进行解析:repons=re.json()#需要先导入json库

res=jsonpath.jsonpath(repons,'$...tgt')[0]#需要先导入jsonpath库

print(res)

为了让代码可循环利用,我们可以将它封装在一个函数里,然后:

while True:

函数名()

4,源码

另外推荐一下小编的存储库,里面有许多优质项目,包括之前讲过的,读者也可参与那个项目的开发,还有就是小编之前讲的爬取小说小编解锁了新玩法哦,想了解的可以点进去看看

项目地址

如果觉得《不会JS逆向还说自己是爬虫人?从负(负基础)开是逆向JS有道翻译》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。