某产权交易
说明
# URL
https://www.ccprec.com/projectSecPage/#/cqzr
# 接口
https://www.ccprec.com/honsanCloudAct代码实现
enc_dec.js
codeStr = ""
pubPass = "BX1o65CoobwcDP33iQW6ld1OyIPsNzF1"
pubPassNum = []
publicKey = ""
var uuidCount = 29
uuid = function (t, n) {
void 0 === t && (t = 16),
void 0 === n && (n = !1),
!n && t < 16 && (console.error("uuid useCase=false 时 len 不能小于 16"),
t = 16),
n && t < 12 && (console.error("uuid useCase=true 时 len 不能小于 12"),
t = 12);
var i = ((new Date).getTime() + 1e14).toString();
return i += ("000" + uuidCount.toString()).substr(-3, 3),
i = n ? parseInt(i).to62() : parseInt(i).toString(36),
i += randomStr(t),
i = i.substr(0, t),
i
}
setPass = function (e) {
pubPassNum = stringChangeASCIINumberArrs(e)
}
stringChangeASCIINumberArrs = function (e) {
for (var t = [], n = 0; n < e.length; n++)
t.push(e.charCodeAt(n));
return t
}
random = function (e, t) {
return void 0 === e && (e = 0),
void 0 === t && (t = 1e4),
Math.floor(Math.random() * (t - e) + e)
}
randomStr = function (e) {
for (var t = [], n = 0; n < e; n++)
t.push(random(0, 35).toString(36));
return t.join("")
}
encryptCode = function (e) {
for (var t = encodeURI(e), n = [], i = 0, r = "", o = random(16, 32), a = randomStr(o), s = stringChangeASCIINumberArrs(a), l = 0, c = 0, u = 0, h = 0; h < t.length; h++)
i = t.charCodeAt(h),
l == pubPassNum.length && (l = 0),
i += pubPassNum[l],
l++,
c == s.length && (c = 0),
i += s[c],
c++,
u += i,
u > 65535 && (u -= 65535),
r = i.toString(36),
r = ("00" + r).substr(-2, 2),
1 == r.length && (r = "0" + r),
n.push(r);
var d = "";
return d = u.toString(36),
d = ("0000" + r).substr(-4, 4),
n.unshift(a),
n.unshift(o.toString(36)),
n.unshift(d),
n.join("")
}
encode = function (e) {
var t = "";
try {
t = JSON.stringify(e)
} catch (n) {
return console.error(n + "这不是一个正确的json对象"),
""
}
console.log('final json:')
console.log(t)
return encryptCode(t)
}
setPass(pubPass)
decryptCode = function (e) {
var t = ""
, n = 0
, i = ""
, r = []
, o = []
, a = 0
, s = 0;
t = e.substr(4, 1),
n = parseInt(t, 36),
i = e.substr(5, n),
r = stringChangeASCIINumberArrs(i),
t = e.substr(5 + n, e.length - 5 - n);
for (var l = "", c = 0, u = 0, h = 0; h < t.length / 2; h++)
l = t.substr(u, 2),
u += 2,
c = parseInt(l, 36),
s == r.length && (s = 0),
c -= r[s],
s++,
a == pubPass.length && (a = 0),
c -= pubPassNum[a],
a++,
l = String.fromCharCode(c),
o.push(l);
return t = o.join(""),
t = decodeURI(t),
t
}
decode = function (e) {
var t;
try {
t = JSON.parse(decryptCode(e))
} catch (n) {
return void console.error(n + "json对象转出失败")
}
console.log(t)
return t
}
decryptCode = function (e) {
var t = ""
, n = 0
, i = ""
, r = []
, o = []
, a = 0
, s = 0;
t = e.substr(4, 1),
n = parseInt(t, 36),
i = e.substr(5, n),
r = stringChangeASCIINumberArrs(i),
t = e.substr(5 + n, e.length - 5 - n);
for (var l = "", c = 0, u = 0, h = 0; h < t.length / 2; h++)
l = t.substr(u, 2),
u += 2,
c = parseInt(l, 36),
s == r.length && (s = 0),
c -= r[s],
s++,
a == pubPass.length && (a = 0),
c -= pubPassNum[a],
a++,
l = String.fromCharCode(c),
o.push(l);
return t = o.join(""),
t = decodeURI(t),
t
}
function get_param(page) {
let e = {
"id": uuid(),
"projectKey": "honsan_cloud_ccprec",
"clientKey": "rtrsuj1nz2o4h1ka",
"token": null,
"clientDailyData": {},
"acts": [{
"id": uuid(),
"fullPath": "/ccprec.com.cn.web/client/info/cqweb_nonphy_cqzr",
"args": [page, 20, null]
}]
};
let e_param = JSON.stringify(e);
console.log('first json:')
console.log(e_param)
return encode(e_param)
}spider.py
import requests, execjs, json
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'text/xml;charset=UTF-8',
'Origin': 'https://www.ccprec.com',
'Pragma': 'no-cache',
'Referer': 'https://www.ccprec.com/projectSecPage/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
}
js_compile = execjs.compile(open('day16-01.js', 'r', encoding='utf-8').read())
# 需要获取的数据页码
cipher_data = js_compile.call("get_param", 1)
print('request data: ')
print(cipher_data)
response = requests.post('https://www.ccprec.com/honsanCloudAct', headers=headers, data=cipher_data)
print('response data:')
print(response.text)
plain_data = js_compile.call("decode", response.text)
print('response plain data: ')
print(plain_data)
print(type(plain_data))
# 信息提取
print('信息提取:')
for item in plain_data['results'][0]['args'][0]['list']:
print(item)易混淆问题
{
results: [ { err: null, args: [Array], id: 'rtrsz67y380bbd8g' } ],
token: null,
reqDate: 1739957350477,
id: 'rtrsz67y380wn3vm',
resDate: 1739957350500
}注意⚠️ 上方返回结果不是报错,而是数据存在于返回结果中的 args: [Array] 中
# 可用下方代码进行打印
console.log(data.results[0]['args'][0]['list'])Last updated