雪重
Python Developer
知识 汗水 灵感 机遇
2021年7月30日 spider js逆向
入门-python实现某道翻译sign和bv
本文介绍如何通过python实现某道翻译的js生成的sign和bv,某道翻译地址(base64):aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLw==
1.chrome抓包分析
获取数据的接口https://*.*dao.com/translate_o?smartresult=dict&smartresult=rule
请求方式POST
请求参数:其中sign bv这俩个参数一坨,应该是加密过后生成
2.定位加密参数位置
在chrome控制台设置XHR断点或者全局搜索sign,最终定位到参数加密生成位置,这段js代码未混淆,逻辑非常清晰
3.python实现
# -*- coding: utf-8 -*-
# @Time : 2021/7/10 13:16
# @Author : zp
# @Python3.7
import hashlib
import time
import random
kwd = '你好'
appversion = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
m = hashlib.md5()
m.update(appversion.encode())
bv = m.hexdigest()
r = time.time()
lts = int(r * 1000)
salt = lts*10+random.randint(1,10)
sign = "fanyideskweb" + kwd + str(salt) + "Y2FYu%TNSbMCxc3t2u^XT"
m = hashlib.md5()
m.update(sign.encode())
sign = m.hexdigest()
data = {
'i': kwd,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': str(salt),
'sign': sign,
'lts': str(lts),
'bv': bv,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
最后使用requests发送请求返回结果{"translateResult":[[{"tgt":"hello","src":"你好"}]],"errorCode":0,"type":"zh-CHS2en"}