JS逆向实现百度翻译接口

难点分析

通过抓包分析我们发现变化的是sign,ts

 

然后我们进入这个js文件,搜索sign

 

 我们发现这个地方的参数和我们请求的携带参数很像,大概率这个sign是在这儿产生的,所以我们在这个地方加上断点调试,我们重新点击立即翻译,发现程序被debug住了,刚好是这个sign: b(e)这个地方,我们复制b(e)在控制台打印结果,发现刚好就是我们需要的sign,并且这个e参数就是我们输入的要翻译的内容

 然后我们就去寻找这个b函数在哪里

 我们进入这个js文件

 这个就是我们需要的b函数,我们复制这个函数到我们的编辑器中运行

 

我们就加上这个r

 

我们开始补环境,window = {}即可

 n函数没有定义,我们就去找n函数的位置

 刚好就在这个b函数的上方,复制n函数之后我们运行

 我们发现与b函数的打印结果不一样

 可能是缺少什么参数,

 经过排查,我们发现r是有初值的,我们的r是null,然后我们复制r的值之后再运行

 这样sign就正确了,接下来就是写我们的爬虫代码

正常请求,没有难点

数据请求,获取结果

from pprint import pprint

import requests
import execjs


def get_info(kw, sign):
    url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
    headers = {
        'Cookie': '''BIDUPSID=AE0057AFE3B8DD4419EE743A83E92DDF; PSTM=1691576823; BAIDUID=AE0057AFE3B8DD44868FC929D565C3D7:FG=1; ab_jid=d3be093499a4daf22882b3fdd51b39e34a37; ab_jid_BFESS=d3be093499a4daf22882b3fdd51b39e34a37; BDUSS=hHWVd3MWpzQ3U1aXgta0lyUGZsakwwTjM2TThOck9hdk0ybzVkaE85Tmc4UU5sSVFBQUFBJCQAAAAAAQAAAAEAAABAw3pg0fS54rXExKuzztGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBk3GRgZNxkUE; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDUSS_BFESS=hHWVd3MWpzQ3U1aXgta0lyUGZsakwwTjM2TThOck9hdk0ybzVkaE85Tmc4UU5sSVFBQUFBJCQAAAAAAQAAAAEAAABAw3pg0fS54rXExKuzztGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBk3GRgZNxkUE; BAIDUID_BFESS=AE0057AFE3B8DD44868FC929D565C3D7:FG=1; BDRCVFR[kSyA9a8U-kc]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=26350; BA_HECTOR=8k2lala481ag2g8l0l8h012v1ie87ai1o; ZFY=LKha4xBKSnQgNRsazVDxM8YqVE8tCyE45yFYvXTRIGw:C; BCLID=11567027351725642543; BCLID_BFESS=11567027351725642543; BDSFRCVID=L-COJexroG0ZmSbfT5OjT4OTwLweG7bTDYrEOwXPsp3LGJLVFakFEG0Pts1-dEu-S2OOogKKLgOTHpkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; BDSFRCVID_BFESS=L-COJexroG0ZmSbfT5OjT4OTwLweG7bTDYrEOwXPsp3LGJLVFakFEG0Pts1-dEu-S2OOogKKLgOTHpkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFsWIrmB2Q-XPoO3KJADfOPbl8hXPI7j-nn-M7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0toW3eTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPb9QgbjBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj-5j5JW3f; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFsWIrmB2Q-XPoO3KJADfOPbl8hXPI7j-nn-M7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0toW3eTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPb9QgbjBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj-5j5JW3f; ab_bid=331d6893f9043a5187e2135d347a9942a997; ab_sr=1.0.1_ODVlZjlkYTU5NmJiZTdkNzViYTllMWNhN2I0OWZhNDBiYjJkYTJlNTNiM2FjZDQ5NWNiZWYwNTczMjlkZGVhNGJmZTRmNDZlZWQxYzg5YTQwNTk1ZmJlMjJjNjBjOTM3Yjg1M2ViNTMzYTU0NmNiZmYyNTI3ZDZhYjA0MTRmYTJmZjM2ZWEzNDgyMzhmMTYxOTQ4MjE0NTZkZTIwOGYxYTk0ZjRjNDM3NGM1ZWU3N2U5NDE4OWNlODkzYzdmYjNj''',
        'Host': 'fanyi.baidu.com',
        'Origin': 'https://fanyi.baidu.com',
        'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203',
    }
    data = {
        'from': 'en',
        'to': 'zh',
        'query': kw,
        'transtype': 'realtime',
        'simple_means_flag': '3',
        'sign': sign,
        'token': '54aed88d1c9fd70488d153668668955a',
        'domain': 'common',
        'ts': '1692671332133',
    }
    res = requests.post(url=url, headers=headers, data=data)
    res.encoding = 'utf-8'
    json_data = res.json()
    input_value = json_data['trans_result']['data'][0]['src']
    result = json_data['trans_result']['data'][0]['dst']
    return input_value, result


def read_js_file(kw):
    with open('百度翻译.js', 'r', encoding='utf-8') as f:
        sign = f.read()
    return execjs.compile(sign).call('sign', kw)


def main(kw):
    sign = read_js_file(kw=kw)
    input_value, result = get_info(kw=kw, sign=sign)
    print(f'您输入的是:{input_value} \n翻译结果为:{result}')


if __name__ == '__main__':
    kw = input("请输入您想要翻译的单词或短语或句子:")
    main(kw=kw)

结果展示

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值