日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫:突破有道翻译js加密(最新)

發布時間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫:突破有道翻译js加密(最新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

爬蟲:突破有道翻譯js加密

代碼已上傳至個人GitHub,可供下載:?突破有道翻譯js加密

思路:(python版本3.6)

1、分析post上傳form信息,發現存在加密行為

2、查看網頁js文件,分析加密函數

3、根據加密函數原理進行解密,突破有道的翻譯接口

?一、打開有道翻譯網頁,按F12鍵,并輸入內容進行翻譯,可以看到服務器對網頁請求作出的回應,最需要關注的是上傳的信息和上傳的路徑(URL)。

?

通過多次觀察,發現上傳的form信息中不斷變化的信息是(i、salt、sign、ts),其他的信息都是不變的。

?

根據以往經驗就可以判斷salt、sign、ts就是有道翻譯為機器獲取其翻譯內容所設置的障礙。

二、尋找js文件中相應的加密函數,并分析其加密過程。

刷新一下網頁,就可以看到反饋回來的各種js文件,fanyi.min.js最為顯眼,像不像【翻譯*密.js】。?

打開fanyi.min.js文件,并將js代碼進行格式化,并查找相應的加密函數。

將格式化后的js代碼放入txt文檔進行查找操作,可以得到如下的加密函數。

?由上圖函數可以看到ts、bv、salt、sign參數的由來,整理如下:

  • ts:指的是獲取當前的時間戳乘以1000取整
  • bv:獲取當前有道翻譯版本的MD5編碼(版本一般長時間不變)
  • salt:ts加上[1, 10]之間的隨機數
  • sign:md5(“fanyideskweb” + 要翻譯的內容 + salt + "1L5ja}w$puC.v_Kz3@yYn")

注意:由于有道翻譯的反爬蟲機制,其中的參數每過一段時間可能會改變,或者直接加密函數發生改變,但不變的解決問題的思想。

三、根據對加密函數的分析,就可以寫相對應的解密代碼了

from urllib import request, parse import time import random import hashlib import jsondef get_ts():ts = str(int(1000 * time.time()))return tsdef get_salt(ts):salt = ts + str(random.randint(0, 10))return saltdef get_sign(words, salt):content = 'fanyideskweb' + words + salt + '1L5ja}w$puC.v_Kz3@yYn'sign = hashlib.md5(content.encode()).hexdigest()return signdef translate(words, ts, salt, sign):url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"data = {"i": words,"from": "AUTO","to": "AUTO","smartresult": "dict","client": "fanyideskweb","salt": salt,"sign": sign,'ts': ts,'bv': 'bbb3ed55971873051bc2ff740579bb49',"doctype": "json","version": "2.1","keyfrom": "fanyi.web","action": "FY_BY_REALTIME","typoResult": "false"}data = parse.urlencode(data).encode()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': len(data),'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Cookie': '__guid=204659719.2422785200799945700.1554675512727.244; OUTFOX_SEARCH_USER_ID=-1327275086@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=378292303.3354687; JSESSIONID=aaaLYwaICIOxi6ofRh8Nw; monitor_count=8; ___rl__test__cookies=1554693830913','Host': 'fanyi.youdao.com','Origin': 'http://fanyi.youdao.com','Referer': 'http://fanyi.youdao.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','X-Requested-With': 'XMLHttpRequest'}req = request.Request(url=url, data=data, headers=headers)rsp = request.urlopen(req)html = rsp.read().decode('utf-8')json_data = json.loads(html)print('翻譯的結果為:' + json_data['translateResult'][0][0]['tgt'])if __name__ == '__main__':words = input('請輸入要翻譯的內容:')ts = get_ts()salt = get_salt(ts)sign = get_sign(words, salt)translate(words, ts, salt, sign)

運行結果:

代碼已上傳至個人GitHub,可供下載:?突破有道翻譯js加密

總結

以上是生活随笔為你收集整理的爬虫:突破有道翻译js加密(最新)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。