python爬虫之JS混淆加密、字体反爬

1.JS混淆加密

我们之前爬取有道翻译的翻译内容时,我们通过fiddler抓取url地址时,我们发现如果我们直接将相关参数传入,会报错。只是因为,某些参数是变化的。因此,我们需要解读JS文件,取得相关参数的生成算法,利用python生成参数,再传入。

我们继续以有道翻译为例讲解如何获取相关参数的生成算法,并利用python生成参数。

首先,我们使用fiddler抓取翻译所需要的全部参数,

data = {
   
    "i": keyword,  # 翻译内容
    "from": "AUTO",  # 源语言,固定值
    "to": "AUTO",  # 目标语言,固定值
    "smartresult": "dict",  # 智能结果,固定值
    "client": "fanyideskweb",  # 客户端,固定值
    "salt": res['salt'],  # 加密用的盐,这个值变化
    "sign": res['sign'],  # 签名字符串,这个值变化
    "ts": res['ts'],  # 毫秒时间戳,这个值变化
    "bv": res['bv'],  # 未知值,这个值变化
    "doctype": "json",  # 文档类型,固定值
    "version": "2.1",  # 版本,固定值
    "keyfrom": "fanyi.web",  # 键的来源,固定值
    "action": "FY_BY_CLICKBUTTION",  # 操作动作,固定值
}

通过分析参数我们发现需要获取salt、sign、ts和bv参数的算法。

我们进入有道翻译页面,右键“检查”-“网络”找到所有的js文件,依次进入并搜索salt、sign。

经过搜索,我们发现fanyi.js文件中有salt和sign,将fanyi.js下载并格式化。在格式化后的js文件中搜索salt,我们可以找到这样一个函数,

function (e, t) {
   
    var n = e("./jquery-1.7");  // e为要翻译的内容
    e("./utils");
    e("./md5");
    var r = function (e) {
   
        var t = n.md5(navigator.appVersion),  // t参数为经过md5加密后的浏览器版本
            r = "" + (new Date).getTime(),  // r参数为时间戳
            i = r + parseInt(10 * Math.random(), 10);  // i参数为时间戳加0-10之间随机整数
        return {
   
            ts: r,  // ts参数为r
            bv: t,  // bv参数为t
            salt: i,  // salt参数为i
            // sign参数为md5加密
            sign: n.md5("fanyideskweb" + e + i + "mmbP%A-r6U3Nw(n]BjuEU")
        }
    };
    t.recordUpdate = function (e) {
   
        var t = e.i,
            i = r(t);
        n.ajax({
   
            type: "POST",
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            url: "/bettertranslation",
            data: {
   
                i: e.i,
                client: "fanyideskweb",
                salt: i.salt,
                sign: i.sign,
                ts: i.ts,
                bv: i.bv,
                tgt: e.tgt,
                modifiedTgt: e.modifiedTgt,
                from: e.from,
                to: e.to
            },
            success: function (e) {
   
            },
            error: function (e) {
   
            }
        })
    },

经过分析js代码,我们可以获取salt、sign、ts和bv参数的算法。我们下面使用python生成这些参数,

import hashlib
import time
import random


def handlerSignSalt(e):
    navigator_appVersion = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56"
    t = hashlib.md5(navigator_appVersion.encode('utf-8')).hexdigest()
    r = str(int
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值