python爬虫js逆向学习(三)

1.问题分析

1.1 查询条件设置后进行点击事件,可抓取到ajax请求的获取的数据包在这里插入图片描述
1.2 对数据包请求过程进行分析,发现Formdata及respopnse都是加密的且formdata中的参数每次刷新后都不同
在这里插入图片描述
在这里插入图片描述
1.3 既然参数及相应数据都是加密的,所以需要先找出参数的生成和解密函数,再找到数据包的解密函数,因为数据包是事件点击后获得的,所以使用火狐浏览器事件定位功能可找出实现点击的代码
在这里插入图片描述
1.4 然后定位到生成源文件中的生成函数get_Data(),再用局部搜索定位get_Data(),发现调用了getAQIData(),getWeatherData()两个函数,再找出这两个函数进行分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.5 接下来找出getServerData()的实现,当前源文件中未找到,再使用chrome的全局搜索进行定位
在这里插入图片描述
加密后的js代码称为js混淆,可使用在线反混淆工具进行解密,然后找出getServerData()进行分析
在这里插入图片描述
getServerData()调用getParam()时需要传入method,object两个参数,可回头看getServerData()调用时携带了哪些参数
在这里插入图片描述
找出生成参数d的函数getParam()及解密数据的函数decodeData()
在这里插入图片描述
在这里插入图片描述
1.6 过程总结
浏览器与服务器实际的交互过程为点击事件发生后,getServerData发起Ajax请求,通过getParam函数获取FormData参数,响应回来的密文数据通过decodeData来解密

2.主要步骤的代码实现

2.1 将反混淆后的代码保存至js文件中,另加入getFormData函数携带getParam的参数并调用返回d

function getFormData(method, city, type, startTime, endTime){
    var param = {};
    param.city = city;
    param.type = type;
    param.startTime = startTime;
    param.endTime = endTime;
    return getParam(method, param);
}

2.2 获取加密参数d

import execjs
import requests

# Params
method = 'GETCITYWEATHER'
city = '深圳'
type = 'HOUR'
start_time = '2020-06-25 00:00:00'
end_time = '2020-06-25 23:00:00'
 
# 编译js代码
ctx = execjs.compile(open('test.js').read())
js = 'getFormData("{0}", "{1}", "{2}", "{3}", "{4}")'.format(method, city, type, start_time, end_time)
# 执行js代码
d = ctx.eval(js)

2.3 post请求后再调用解密函数获取最终结果

#发起post请求
url = 'https://www.aqistudy.cn/apinew/aqistudyapi.php'
res_html = requests.post(url, data={'d': d}).text

#对加密的响应数据进行解密
js = 'decodeData("{0}")'.format(res_html)
data = ctx.eval(js)

本文为自己学习记录,参照博文为:https://www.cnblogs.com/bobo-zhang/p/11243138.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值