有道翻译js逆向更新了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有道翻译js逆向更新了相关的知识,希望对你有一定的参考价值。
参考技术A 更新了。有道翻译js逆向更新了,道高一尺,魔高一丈,网页开发会对API接口请求参数进行加密,来增加爬虫抓取的门槛。为此可以通过js逆向来分析破解加密方式,模拟浏览器发送请求获取接口数据。JS逆向--有道翻译
一、目标
有道翻译网站:https://fanyi.youdao.com/
通过有道翻译的接口,代码实现翻译功能
二、分析
- 当我们输入翻译内容时,会局部刷新出翻译结果 打开抓包工具,重新输入一个翻译内容,在’XHR‘下会捕获到一个ajax请求数据包
- url:’https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule‘
- POST请求方式
- 表单数据中i(需要翻译的内容)、salt、sign、lts参数是动态变化的,bv参数虽然不变,但是经过了加密
- 我们可以在这几个地方打断点,重新输入翻译内容进行调试
- 通过分析js发现:
- i:需要翻译的内容
- lts:时间戳 *1000,然后取整
- salt:lts后面再添上一位0-9之间的随机数
- sign:将(\'fanyideskweb\' + i + salt + \'Tbh5E8=q6U3EXe+&L[4c@\')进行md5加密
- bv:浏览器版本号,将User-Agent中第一个/以及前面的内容去掉后,进行md5加密
- 接下来我们就可以通过python代码去实现JS逆向,但是需要注意的是,有道网站需要验证headers中的cookie、User-Agent以及Referer参数,否则无法获取到数据,因此我们可以考虑使用requests模块中的session去发送请求,它会帮我们处理cookie
三、代码实现
# coding:utf-8
import requests
import time
import random
from hashlib import md5
from fake_useragent import UserAgent
class YouDao:
def __init__(self):
self.ua = UserAgent(use_cache_server=False).random # 生成一个随机User-Agent
self.get_url = \'https://fanyi.youdao.com/\'
self.post_url = \'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule\'
self.headers = {
\'Referer\': self.get_url,
\'User-Agent\': self.ua
}
self.sess = requests.session()
def start(self):
# 通过session发送请求,会获得cookie,再次发送请求时会携带上
self.sess.get(url=self.get_url, headers={\'User-Agent\': self.ua})
while True:
i = input(\'请输入需要翻译的内容(q退出):\')
if i == \'q\':
self.sess.close()
break
# js逆向
lts = str(int(time.time() * 1000)) # 时间戳*1000的整数部分字符串
bv = md5(self.headers[\'User-Agent\'].partition(\'/\')[-1].encode()).hexdigest() # md5加密的浏览器版本
salt = lts + str(random.randint(0, 9)) # lts后面添上一个0-9的随机整数
sign = md5((\'fanyideskweb\' + i + salt + \'Tbh5E8=q6U3EXe+&L[4c@\').encode()).hexdigest() # md5加密的签名
form_data = {
\'i\': i, # 需要翻译的内容
\'from\': \'AUTO\',
\'to\': \'AUTO\',
\'smartresult\': \'dict\',
\'client\': \'fanyideskweb\',
\'salt\': salt,
\'sign\': sign,
\'lts\': lts,
\'bv\': bv,
\'doctype\': \'json\',
\'version\': \'2.1\',
\'keyfrom\': \'fanyi.web\',
\'action\': \'FY_BY_REALTlME\'
}
result = self.sess.post(url=self.post_url, headers=self.headers, data=form_data).json()[\'translateResult\'][0][0][\'tgt\']
print(\'翻译结果:%s\'%result)
if __name__ == \'__main__\':
YouDao().start()
四、运行结果展示
请输入需要翻译的内容(q退出):中国
翻译结果:China
请输入需要翻译的内容(q退出):hello
翻译结果:你好
请输入需要翻译的内容(q退出):q
Process finished with exit code 0
以上是关于有道翻译js逆向更新了的主要内容,如果未能解决你的问题,请参考以下文章