《封号码罗》python爬虫之JS逆向入门某道翻译(七)

http://fanyi.youdao.com/

用的是谷歌浏览器,打开链接之后,F12,打开控制台,在有道待翻译区输入任意英文,例如“love”
在这里插入图片描述
然后在控制台查看,发现有ajax请求
在这里插入图片描述
查看该请求
在这里插入图片描述
查看Headers,发现是post请求
在这里插入图片描述
观察参数,红框为动态加密参数
在这里插入图片描述
观察到sign签名关键字,全局搜索该参数
在这里插入图片描述
在这里插入图片描述
点击查找到的js
在这里插入图片描述
下断点进行观察分析
在这里插入图片描述
代码里面有注释:

// 这个是js文件
var r = function (e) {
    var md5 = require('md5-node');
    // navigator.appVersion这个参数就是UA
    var t = md5("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36")
        , r = "" + (new Date).getTime()
        , i = r + parseInt(10 * Math.random(), 10);
    var data = {
        ts: r,
        bv: t,
        salt: i,
        sign: md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
    }
    return data
};

// console.log(r("love"))
// {
//   ts: '1614230672499',
//   bv: 'c13aa665496786142fe81f1333cd4bec',
//   salt: '16142306724998',
//   sign: 'f82a7908e644a0d4d2bbbf234ac2baa1'
// }
# 这个是.py文件
import requests
import execjs
import time
import hashlib

index_url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36",
    "Cookie": "OUTFOX_SEARCH_USER_ID=1468790101@10.169.0.83; JSESSIONID=aaa9hikkeF-93eRTdqxFx; OUTFOX_SEARCH_USER_ID_NCOO=2112488829.4193861; ___rl__test__cookies=1614229541217",
    "Referer": "http://fanyi.youdao.com/",
}

# translate = "love"
translate = input("请输入要翻译的内容:")

node = execjs.get()
file = "youdao.js"
ctx = node.compile(open(file=file).read())
data = ctx.call("r", translate)  # call后面是调用js函数  eval后面调用js变量
# print(data)
# {'ts': '1614231730580', 'bv': 'c13aa665496786142fe81f1333cd4bec', 'salt': '16142317305806', 'sign': '24a7728581cd4840239abeb34f69b09d'}

# 源匹配为 (.*):(.*)$
# 替换匹配为 "$1": "$2",
params_data = {
    "i": translate,
    "from": "AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "client": "fanyideskweb",
    "salt": data["salt"],  # 13位的时间戳+一位0-9的数,成14位str(int(time.time()*1000)) + str(random.randint(0, 9))
    "sign": data["sign"],
    # sign = hashlib.md5(("fanyideskweb" + translate + data["salt"] + "Tbh5E8=q6U3EXe+&L[4c@").encode('utf-8')).hexdigest()
    "lts": data["ts"],  # 13位的时间戳 str(int(time.time()*1000))
    "bv": data["bv"],  # hashlib.md5("UA")
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_REALTlME"
}
response = requests.post(url=index_url, headers=headers, data=params_data)
print(response.json())

嗨!对于爬虫中的 JavaScript 逆向案例,我可以给你提供一个简单的示例。请注意,这个示例只是为了帮助你理解逆向过程,真实的应用中可能涉及法律和伦理问题,请合法使用爬虫技术。 假设我们要爬取一个网站上的某个页面数据,但是该页面通过 JavaScript 动态生成。我们可以通过分析网页的 JavaScript 代码来逆向工程,获取所需数据。 首先,打开 Chrome 浏览器并进入开发者工具(按 F12 键或右键点击页面并选择“检查”)。然后切换到“网络”选项卡。 接下来,在浏览器地址栏中输入目标网页的 URL 并按下回车,浏览器将开始加载页面。在网络选项卡中,你将看到所有请求和响应的列表。 查找其中一个请求,该请求可能包含我们所需的数据。点击该请求并查看其请求头、响应头和响应体。 在响应体中,你可能会看到一些 JavaScript 代码,这些代码负责生成页面上的内容。你可以仔细阅读该代码,并找到生成目标数据的部分。 如果你发现目标数据是通过 Ajax 请求获取的,你可以查看该 Ajax 请求的 URL 和参数,然后使用 Python 的 requests 库或其他适当的方法模拟该请求,并解析响应获取数据。 如果你发现目标数据是在 JavaScript 代码中直接生成的,你可以尝试分析代码逻辑并编写相应的 Python 代码来模拟该过程。这可能涉及到使用 JavaScript 解释器或库来执行 JavaScript 代码。 需要注意的是,JavaScript 逆向工程是一项复杂的任务,需要对 JavaScript 和网络协议有一定的理解。同时,网站所有者可能会采取一些反爬虫措施来阻止你的行为,所以请务必遵守法律法规和网站的使用规则。 希望这个示例能够帮助你入门 JavaScript 逆向工程。如果你有任何其他问题,欢迎继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值