最新Python爬虫有道翻译JS逆向解析详细介绍版,附源码

最新Python爬虫有道翻译JS逆向解析详细介绍版,附源码

2023年6月29日发(作者:)

最新Python爬⾍有道翻译JS逆向解析详细介绍版,附源码我的第⼀篇⽂章,写的很详细,这⾥⽅便刚接触爬⾍帅哥们理解,⼤家⼀起加油前两步为js的逆向分析过程,了解过程的请跳到第三步(源码),最后打包成exe⽂件有道翻译⽹址:第⼀步:找到有道翻译发送请求的Url地址⽼规矩进去界⾯F12打开浏览器的抓包⼯具,输⼊测试值 查看界⾯源代码发现找不到翻译内容,可以判断请求是aj⼆次请求或者封装在js⽂件⾥。点击调试⼯具中点network(⽹络)选择XHR可以查考到有哪些⼆次请求,点击Preview能查看到相应的内容。

发现这⾥⾯相应的就是我们翻译的内容,然后找到Header,复制好请求的地址Url请求地址: url = "/translate_o?smartresult=dict&smartresult=rule" #有道翻译的请求头发现是POSt请求,拉到最下⾯找到需要的参数虽然有很多,可是我们通过多次输⼊内容发送请求,通过对⽐发现以上参数发⽣变化的只有salt,sign,lts这三个只要找到salt,sign,lts加密过程再⽤post⽅式发送请求就好了。第⼆步:找以上参数的加密过程有道翻译为post请求 且有salt,sign,lts三个随机变量 其他data中的为固定值,所以找到这三个变量的加密过程即可这⾥是:找三个变量的⽣成途径打开搜索,搜索salt,打上断点 可以在8389⾏发现salt是进⾏md5加密过后的字段打上断点运⾏后: 发现e为输⼊内容,i为js时间戳加上⼀个0-9的随机整数,变量sign分析完毕sign=fanyideskweb" + 输⼊的内容(e) + i(时间戳) + "Tbh5E8=q6U3EXe+&L[4c@ 再后⽤md5加密lts:时间戳 通过前⾯多次输⼊发⽣请求内容时,发现its就是时间戳salt:时间戳加0-随机整数以上三个变量都解析完毕,md5加密可以在有道翻译的js⽂件⾥⾯保存加密过程,再通过python的第三⽅execjs库去执⾏js⽂件 ,也可以直接调⽤hashlib 进⾏md5加密搜索md5即可找到加密过程在8209⾏,通过发条调试js,找到所缺的函数内容后,直接写⼊js⽂件,再⽤execjs读取即可第三步:⽤python语⾔改写调⽤接⼝附代码:我这⾥是直接调⽤第三⽅库加密,以下代码复制粘贴可直接运⾏,缺失的库直接添加即可import requests #获取url请求# import execjs #node模板 ⽤来执⾏js⽂件import random #随机数import time #⽤来⽣成python模式的时间戳import hashlib #md5加密模板可以直接对"fanyideskweb" + 输⼊的内容 + i + "Tbh5E8=q6U3EXe+&L[4c@" 加密得到salt'''有道翻译为post请求 且有salt,sign,lts三个随机变量 其他data中的为固定值,所以找到这三个变量的加密过程即可lts:时间戳sign:fanyideskweb" + 输⼊的内容(e) + i(时间戳) + "Tbh5E8=q6U3EXe+&L[4c@ 再后⽤md5加密salt:时间戳加0-随机整数以上三个都为字符类型'''if __name__ == '__main__': while True: print('-------------------有道翻译-------------------') e = input('请输⼊需要翻译的⽂字:').strip() if len(e) and e!="" : rsum = str(int(()*10)) #⽣成(0,9)的随机整数并转换成字符型 r = str(int(() * 1000)) #⽣成python模式下的时间戳 i = r+rsum #构造data中的salt变量 完成了salt变量的加密:时间py时间戳乘1000即js时间加上0-9的随机整数 # node = () # ctx = e(open('./',encoding='utf-8').read()) # funcName = "getSign('{0}','{1}')".format(e,i) #调⽤有道翻译的加密语法得到sign # sign = (funcName) #fanyideskweb" + 输⼊的内容就是e + i + "Tbh5E8=q6U3EXe+&L[4c@" 加密得到sign url = "/translate_o?smartresult=dict&smartresult=rule" #有道翻译的请求头 Header = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', 'Referer':'/', } start_sign = "fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@" sign_ = 5(start_()).hexdigest() Data = { 'i' : e , 'from' : 'AUTO', 'to' : 'AUTO', 'smartresult' : 'dict', 'client' : 'fanyideskweb', 'salt' : i, #时间戳加(0,9)随机整数 'lts' : r, #时间戳 'bv' : 'c795a332c678d5063a1ee5eb15253848', 'doctype' : 'json', 'version' : '2.1', 'keyfrom' : '', 'action' : 'FY_BY_REALTlME' } try:#对requests异常处理 'Cookie':'OUTFOX_SEARCH_USER_ID_NCOO=1328394085.0392962; OUTFOX_SEARCH_USER_ID="1796778757@10.108.160.18"; JSESSION 'sign' : sign_, # "fanyideskweb" + 输⼊的内容 + i + "Tbh5E8=q6U3EXe+&L[4c@" 在youdaojs⽂件中进⾏md5加密;也可以直接⽤sign_(直接⽤hash try:#对requests异常处理 # 发送请求,获取响应 rsp = (url, headers=Header, data=Data) # print(rsp) #检查接⼝ except: print('接⼝错误,请退出程序!!') else: # 打印数据 if len(())>1: # print(Data['i']) result = () # print(result) for items in ()['translateResult']: for item in items: print("翻译后:",item['tgt']) # print("src长度为:", len(item['src'])) else: print("输⼊错误请重新输⼊") else : print("输⼊错误请重新输⼊") del e'''

src为当前语句翻译前的字符串 tgt为翻译后的内容 BUG:

最多只能翻译src的长度为50个字符的内容 Bug:

1.输⼊多个英⽂字符事翻译内容显⽰不完全,⽽输⼊多个中⽂字符翻译内容正确

问题分析:

2 导致的原因src字符长度限制问题被⽹站辨识爬⾍ 在请求返回时候限制了翻译字数 src

解决⽅案: 进aj⽂件查看src,tgt怎么得出 将input的英⽂长度>50就 .分割 依次请求后拼接翻译内容(应该没啥⽤,只能⼩规模减⼩错误)'''运⾏结果:js解析⼩技巧:搜索可以直接搜索关键字如md5,hash,AES,DES,RSA等加密关键字⼤部分⽹站都运⽤到时间戳进⾏加密,看到13位数字的参数值⼤概率就是时间戳,还有些⽹站在js加密过程中中进⾏了as值转换根本搜不到上传的参数,不⽤慌找加密关键字或者根据调⽤的函数打断点⼀个个找(如蜂窝⽹)⾥⾯各注释也写的很详细了,还有存在的bug也标明,有道翻译爬取到此结束~第四步:⽂件打包转载:打包那⼀步直接在pycharm的Trminal输⼊命令:pyinstaller -F (,打包的⽂件名称)打包成功后到py⽂件⽬录⾥,找到新增的dist⽂件夹打开就有exe⽂件了,可以发给其他⼩伙伴运⾏

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687985315a63886.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信