文章目录
- 前言
- 一、页面分析
- 二、_token解密
- 三、获取加密方法
- 四、请求源码
前言
这周事情有点多,还面试了一家公司,算是学有所成吧,工资比现在的多,不过我还会继续努力的,前几天找了几个逆向的网站都没解出来,头挺大,哎,都是JS太复杂得问题,扣来扣去扣不全代码,得要补一补JS。
这次带来的是某团没事商铺数据的获取,主要是一个_token的解密JS
地址连接:aHR0cHM6Ly9oei5tZWl0dWFuLmNvbS9tZWlzaGkv
一、页面分析
打开开发者模式抓取数据链接,这个请求的主要加密参数是_token,uuid可以从源码获取
二、_token解密
搜索_token,出来一个直接点进去,再接着搜索,可以找到加密位置,下断点重新请求
调试进去,可以看到主要的加密函数
最后一步,就是要扣他的加密JS了,我尝试着扣了一下,哎,不太行,我还是太菜了,抠不出完整的,怎么办???
三、获取加密方法
这个时候哦怎么办,直接把他的JS代码直接抠出来,是个匿名函数,里面有三个参数
然后其中_token加密参数是第一个字典参数的key为17的方法里
我们在外面声明个全局变量 var data;
最后我们执行下,可以看到_token已经出来了
四、请求源码
import requests,json,execjs
with open('./new.js',encoding='utf-8') as f:
js_func = execjs.compile(f.read())
_token = js_func.eval('data')
print(_token)
headers = {
'Connection': 'keep-alive',
'Accept': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://hz.meituan.com/meishi/pn2/',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
params = (
('cityName', '杭州'),
('cateId', '0'),
('areaId', '0'),
('sort', ''),
('dinnerCountAttrId', ''),
('page', '1'),
('userId', ''),
('uuid', 'dc27c2b094a34e0a9c63.1605940296.1.0.0'),
('platform', '1'),
('partner', '126'),
('originUrl', 'https://hz.meituan.com/meishi/pn1/'),
('riskLevel', '1'),
('optimusCode', '10'),
('_token', _token),
)
response = requests.get('https://hz.meituan.com/meishi/api/poi/getPoiList', headers=headers, params=params)
js_data = json.loads(response.text)
print(response.text)
for data in js_data['data']['poiInfos']:
print(data['title'],data['address'],data['poiId'])