javascript
有道翻译爬虫+JS逆向
一、首先找到有道翻譯的API鏈接
二、點(diǎn)擊payload,查看DATA里面需要傳輸?shù)臄?shù)據(jù),通過(guò)兩次不同的翻譯內(nèi)容,可以看到DATA中變化的值。
分別為:salt、sign、lts。
同時(shí)發(fā)現(xiàn)lts等于salt截取個(gè)位數(shù)字
三、全局搜索關(guān)鍵字sign,找到JS文件?
四,打斷點(diǎn)找我們需要的sign。
?
?發(fā)現(xiàn)此處r和i的值與salt、lts對(duì)應(yīng)。
觀察函數(shù)可得r等于空字符串+JS時(shí)間戳
所以r與i已經(jīng)獲取
?觀察得知sign通過(guò)md5這個(gè)函數(shù)生成,鼠標(biāo)放在md5,可得知函數(shù)具體位置,點(diǎn)擊跳轉(zhuǎn)到md5.
?
可以看到md5函數(shù),然后復(fù)制它使用我們的工具測(cè)試,發(fā)現(xiàn)它缺少兩個(gè)對(duì)象分別是h(e)和f(e),然后繼續(xù)查找源js文件
?找到兩個(gè)函數(shù),并將他們復(fù)制下來(lái)
?
?函數(shù)加載成功,最后再寫一個(gè)我們的獲取sign函數(shù),此表達(dá)式源JS已經(jīng)給出
?通過(guò)我們獲取的JS代碼已經(jīng)成功得到了sign。
?之后就是python爬蟲過(guò)程,直接放代碼。
import randomimport requests import execjs import time r=str(int(time.time()*1000)) i=r+str(int(random.random()*10)) print(i) print(r) e=input("請(qǐng)輸入要翻譯內(nèi)容") node=execjs.get() ctx=node.compile(open('有道.js',encoding='utf-8').read()) funcName=f"getsign('{e}','{i}')" sign=ctx.eval(funcName) print(sign)url='https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36','Referer': 'https://fanyi.youdao.com/','Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=992843693.3624797; OUTFOX_SEARCH_USER_ID="279032462@10.108.162.133"; JSESSIONID=aaahflImy7TP96ITSgOay; fanyi-ad-id=305558; fanyi-ad-closed=1; ___rl__test__cookies=1649944477314' }data={ 'i': e, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client':' fanyideskweb', 'salt': i, 'sign': sign, 'lts': r, 'bv': '803d4a8f2036921cf486753934c3ae8a', 'doctype':' json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action:' :'FY_BY_REALTlME'}a=requests.post(url,headers=headers,data=data).json() print(a)總結(jié)
以上是生活随笔為你收集整理的有道翻译爬虫+JS逆向的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据仓库分层DWD、DWB、DWS
- 下一篇: Android 上能提高学习工作效率的应