通过浏览器的控制台 很方便的获取到请求数据的接口 把接口拿来请求发现请求3次就不行了,提示重复使用 看来他的url的参数有经过验证。这时候就需要找到他的验证方式 自己生成key。
这个_r就是请求的验证的参数 那怎么找到这个_r的生成方式呢?
很简单直接在网络的面板按住ctrl+f进行搜索这个_r
很幸运 在main.js 的第一个就找到了这个_r的方法
只有在这个地方打个断点 就能知道这个方法是否是生成这个_r参数的方法,通过右键在源面板打开
断住了 依次步进
先在控制台测试一下这个方法 果然成功了 OK 把这个方法复制到python脚本
测试脚本 这里就不提供真实的url了
import requests
import execjs
hearders = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
}
ctx = execjs.compile("""
function c(t) {
var a, i, n = Math.abs(parseInt((new Date).getTime() * Math.random() * 1e4)).toString(), o = 0;
for (a = 0; a < n.length; a++)
o += parseInt(n[a]);
return i = function(t) {
return function(a, i) {
return i - "" + a.length <= 0 ? a : (t[i] || (t[i] = Array(i + 1).join(0))) + a
}
}([]),
o += n.length,
o = i(o, 3 - o.toString().length),
t.toString() + n + o
}
""")
def getIds():
url1 = f"https://****?_r={ctx.call('c',1)}&carStyle=xiaoche&carType=car&cityCode=110000&course=kemu1&kemuStyle=kemu1"
req1 = requests.get(url1).json()
data = req1['data']
print(data[0:10])
questionIds = ','.join(map(str, data[0:10]))
url2 = f"https://****?_r={ctx.call('c',1)}&carType=car&course=kemu1&questionIds={questionIds}"
req2 = requests.get(url2).json()
print(req2)