Python网络爬虫:百度翻译JS解密

本文介绍了如何解析百度翻译的JS加密过程,包括理解请求参数、解密JS代码,以及编写爬虫代码来获取签名值。通过调试JS找到关键函数,最终成功模拟加密并实现翻译请求。
摘要由CSDN通过智能技术生成

hello,大家好,我是wangzirui32,今天我们来学习JS解密的一个案例——百度翻译JS解密,开始学习吧!

1. 解析请求参数

百度翻译的链接:https://fanyi.baidu.com
打开开发者工具,切换到“Network”,然后输入一些文字进行测试:
请求
图片中用红色框标注的是翻译的请求,请求表单如下:
表单
通过尝试不同的翻译内容,发现只有sign的值会变,这个值应该是根据翻译内容自动生成的。
那么,sign值是如何加密的呢?这就需要深入JS代码了。

2. 解析JS代码

首先,我们再次加载页面,选择“JS”选项,再按下Ctrl+Shift+F切换到搜索模式,搜索sign:
查找JS文件
经过排查,发现index_a8b7098.js这个JS文件很可疑,匹配了结果很多次。
双击此文件,选择“{}”美化代码:
JS文件
按下Ctrl+F,输入sign查询,最后找到了加密的代码,然后再点击代码行数,设置断点:
设置断点
然后,点击“翻译”按钮,此时JS代码会停留再这一行等待执行,再看右边的调试栏,找到L函数,因为设置sign的代码是L(e)
L函数
接着,右击函数名(L),选择“Show function definition”,找到函数源代码:
函数定义
将代码进行复制,如下:

function e(r) {
   
    var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    if (null === o) {
   
        var t = r.length;
        t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
    } else {
   
        for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)
            "" !== e[C] && f.push.apply(f, a(e[C].split(""))),
            C !== h - 1 && f.push(o[C]);
        var g = f.length;
        g > 30 && (r = f.slice(0, 10
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值