前言
老李是一个真正的农业富裕,文化水平不是很高,所以有时盲目跟随一些事情,不知道从哪里知道,因为他以前也遭受了几次损失,所以这次特别找到辣条,但辣条只有这个技能,你可以看看下面的操作你认为对老李有帮助啊~ |
目录
- 前言
-
- 工具准备
- 采集目标地址
- 项目需求分析
-
- 第一步
- 第二步
- js逆向操作
- 共享简单的源代码
工具准备
开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests
收集目标地址
项目需求分析
要求:资源信息需要提取到每个数据
第一步
区分数据的加载方法可以清楚地看到,当前的数据是动态数据。单击浏览器页面上的鼠标,点击查看点击网络,首先定位我们想要获得的数据信息
第二步
结构要求头发送网络要求,需要带x-apiKey,User-Agent,Referer,Cookie
headers = {
# 加密的 'x-apiKey': LWIzMWUtNDU0Ny05Mjk5LWI2ZDA3Yjc2MzFhYmEyYzkwM2NjfDI3Njk0MzQ1ODIzMjAwNDc, 'Host': 'www.oklink.com', 'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1', 'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https://www.oklink.com/zh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' }
再次发送请求,
headers = {
# 加密的 'x-apiKey': 'LWIzMWUtNDU0Ny05Mjk5LWI2ZDA3Yjc2MzFhYmEyYzkwM2NjfDI3Njk0MzQ1ODIzMjAwNDc', 'Host': 'www.oklink.com', 'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1', 'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https://www.oklink.com/zh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' } # 获取到网址 静态数据 动态数据 抓包 找到我们想要的数据 url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1658301391444&limit=20&offset=20'
# 发送请求 浏览器 代码
response = requests.get(url, headers=headers)
print(response.text)
发送请求的时候会发现我们,请求的数据和我们看到的数据不正确,获取的数据是 很明确的告诉我们访问已经过期了,那我们加载的数据可以很明显的看出来x-apiKey是加密的数据,是在不断变化的,那我们需要对当前x-apiKey来进行逆向
js逆向操作
通过搜索来定位到加密字段的加密文件 在当前文件进行搜索,搜索我们关键字形成的位置 可以看出我们当前的数据是有这一行代码来进行生成的,在当前代码上打上一个断点,刷新页面跳转到执行js的代码位置
可以看到这个就是我们当前加密的函数位置,可以通过两种方式来进行对js代码处理,第一个可以直接把js代码转换成py代码,再有就是直接扣js代码,我们这里就投个小懒,直接扣js代码来补环境
API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
function encryptApiKey() {
var t = API_KEY
, e = t.split("")
, r = e.splice(0, 8);
return e.concat(r).join("")
}
function encryptTime(t) {
var e = (1 * t + 1111111111111).toString().split("")
, r = parseInt(10 * Math.random(), 10)
, n = parseInt(10 * Math.random(), 10)
, o = parseInt(10 * Math.random(), 10);
return e.concat([r, n, o]).join("")
}
function comb(t, e) {
var r = "".concat(t, "|").concat(e);
return btoa(r)
}
function getApiKey() {
var t = (new Date).getTime()
, e = encryptApiKey();
return t = encryptTime(t),
comb(e, t)
}
// console.log(getApiKey());
通过execjs来对构造一个js环境,读取文件,在将文件js代码放置在js环境里通过py代码来进行调用 当前数据就获取正确
简易源码分享
import requests # 发送网络请求的工具
import execjs # 转换js代码
with open('abd.js', 'r')as f:
js_code = f.read()
resp = execjs.compile(js_code)
api = resp.call('getApiKey')
# print(api)
headers = {
# 加密的
'x-apiKey': api,
'Host': 'www.oklink.com',
'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1',
'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https%3A%2F%2Fwww.oklink.com%2Fzh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
# 获取到网址 静态数据 动态数据 抓包 找到我们想要的数据
url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1658301391444&limit=20&offset=20'
# 发送请求 浏览器 代码
response = requests.get(url, headers=headers)
print(response.text)
API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
function encryptApiKey() {
var t = API_KEY
, e = t.split("")
, r = e.splice(0, 8);
return e.concat(r).join("")
}
function encryptTime(t) {
var e = (1 * t + 1111111111111).toString().split("")
, r = parseInt(10 * Math.random(), 10)
, n = parseInt(10 * Math.random(), 10)
, o = parseInt(10 * Math.random(), 10);
return e.concat([r, n, o]).join("")
}
function comb(t, e) {
var r = "".concat(t, "|").concat(e);
return btoa(r)
}
function getApiKey() {
var t = (new Date).getTime()
, e = encryptApiKey();
return t = encryptTime(t),
comb(e, t)
}
// console.log(getApiKey());