Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 32eb83c5d6 | |||
| 9b191be6d6 | |||
| 8a6444cb14 |
@@ -0,0 +1,445 @@
|
||||
// JSPL的计算过程总结:
|
||||
//
|
||||
// 输入: 传入的会话ID或相关数据
|
||||
// 哈希处理: 使用DJB2算法变种对输入进行哈希
|
||||
// 种子生成: 结合时间戳和常量生成加密种子
|
||||
// 数据收集: 收集各种浏览器指纹和环境信息
|
||||
// 加密处理: 使用自定义的流加密算法对数据进行加密
|
||||
// Base64编码: 最终使用自定义字符集进行Base64编码
|
||||
// 这个函数生成的第三个返回值就是用于JSPL参数的加密字符串
|
||||
var zn = (function () {
|
||||
// 检查是否已经初始化
|
||||
// if (Pn) {
|
||||
// return Nn;
|
||||
// }
|
||||
|
||||
Pn = true;
|
||||
var n = "unknown"; // 默认返回值
|
||||
var constantSeed = 11027890091; // 常量种子
|
||||
var o = true; // 状态标志
|
||||
|
||||
// 字符串哈希函数 - DJB2算法的变种
|
||||
function djb2HashString(str) {
|
||||
if (!str) {
|
||||
return n;
|
||||
}
|
||||
var hash = 0;
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
hash = (hash << 8) - hash + str.charCodeAt(i) | 0;
|
||||
}
|
||||
return hash === 0 ? n : hash;
|
||||
}
|
||||
|
||||
// 映射函数 - 用于Base64编码的自定义字符集
|
||||
function mapChar(n) {
|
||||
if (n > 37) {
|
||||
return 59 + n;
|
||||
} else if (n > 11) {
|
||||
return 53 + n;
|
||||
} else if (n > 1) {
|
||||
return 46 + n;
|
||||
} else {
|
||||
return n * 50 + 45;
|
||||
}
|
||||
}
|
||||
|
||||
// 线性同余生成器 - 用于生成伪随机数
|
||||
function lcg(n) {
|
||||
return (n = (n ^= n << 13) ^ n >> 17) ^ n << 5;
|
||||
}
|
||||
|
||||
// 加密随机数生成器
|
||||
function createRandomGenerator(seed, initialValue) {
|
||||
var state = seed;
|
||||
var counter = -1;
|
||||
var value = initialValue;
|
||||
var firstCall = o;
|
||||
o = false;
|
||||
var buffer = null;
|
||||
|
||||
return function (peek) {
|
||||
var result;
|
||||
if (buffer !== null) {
|
||||
result = buffer;
|
||||
buffer = null;
|
||||
} else {
|
||||
if (++counter > 2) {
|
||||
state = lcg(state);
|
||||
counter = 0;
|
||||
}
|
||||
result = ((result = state >> 16 - counter * 8) ^ (firstCall ? --value : 0)) & 255;
|
||||
if (peek) {
|
||||
buffer = result;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
// 主加密函数
|
||||
return Nn = function (inputString, additionalData) {
|
||||
// console.log("inputString:" + inputString)
|
||||
// console.log("additionalData:" + additionalData)
|
||||
// 混合输入数据生成种子
|
||||
var seed = constantSeed ^ djb2HashString(inputString) ^ additionalData;
|
||||
|
||||
// 生成基于时间的随机数
|
||||
var timeBasedRandom = lcg(lcg(Date.now() >> 3 ^ constantSeed) * constantSeed);
|
||||
|
||||
// 创建随机数生成器
|
||||
var randomGenerator = createRandomGenerator(seed, timeBasedRandom);
|
||||
|
||||
// 存储加密数据的数组
|
||||
var encryptedData = [];
|
||||
var isFirstCall = true;
|
||||
var callCounter = 0;
|
||||
|
||||
// UTF-8编码和加密函数
|
||||
function utf8EncodeAndEncrypt(str) {
|
||||
var bytes = [];
|
||||
var byteIndex = 0;
|
||||
|
||||
// UTF-8编码
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var charCode = str.charCodeAt(i);
|
||||
if (charCode < 128) {
|
||||
bytes[byteIndex++] = charCode;
|
||||
} else {
|
||||
if (charCode < 2048) {
|
||||
bytes[byteIndex++] = charCode >> 6 | 192;
|
||||
} else {
|
||||
if ((charCode & 64512) == 55296 && i + 1 < str.length && (str.charCodeAt(i + 1) & 64512) == 56320) {
|
||||
charCode = 65536 + ((charCode & 1023) << 10) + (str.charCodeAt(++i) & 1023);
|
||||
bytes[byteIndex++] = charCode >> 18 | 240;
|
||||
bytes[byteIndex++] = charCode >> 12 & 63 | 128;
|
||||
} else {
|
||||
bytes[byteIndex++] = charCode >> 12 | 224;
|
||||
}
|
||||
bytes[byteIndex++] = charCode >> 6 & 63 | 128;
|
||||
}
|
||||
bytes[byteIndex++] = charCode & 63 | 128;
|
||||
}
|
||||
}
|
||||
|
||||
// XOR加密
|
||||
for (var j = 0; j < bytes.length; j++) {
|
||||
bytes[j] ^= randomGenerator();
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
// JSON序列化函数
|
||||
function safeJsonStringify(obj) {
|
||||
try {
|
||||
return JSON.stringify(obj);
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
// 数据收集和加密函数
|
||||
function collectAndEncrypt(key, value) {
|
||||
// console.log("key:" + key)
|
||||
// console.log("value:" + value)
|
||||
if (!(typeof key != "string" || key.length == 0 || value && ["number", "string", "boolean"].indexOf(typeof value) == -1)) {
|
||||
let serializedKey = safeJsonStringify(key);
|
||||
// console.log("serializedKey:" + serializedKey)
|
||||
value = safeJsonStringify(value);
|
||||
// console.log("serializedValue:" + value)
|
||||
|
||||
if (key && value !== undefined && key !== "xt1") {
|
||||
// 添加分隔符和加密数据
|
||||
encryptedData.push(randomGenerator() ^ (encryptedData.length ? 44 : 123));
|
||||
Array.prototype.push.apply(encryptedData, utf8EncodeAndEncrypt(serializedKey));
|
||||
encryptedData.push(randomGenerator() ^ 58);
|
||||
Array.prototype.push.apply(encryptedData, utf8EncodeAndEncrypt(value));
|
||||
|
||||
// 第一次调用时添加额外数据
|
||||
if (isFirstCall) {
|
||||
isFirstCall = false;
|
||||
// var hsv = typeof window._hsv == "string" && window._hsv.length > 0 ||
|
||||
// typeof window._hsv == "number" && !isNaN(window._hsv) ? window._hsv : 33;
|
||||
//todo hsv 怎么拿到
|
||||
var hsv = 33;
|
||||
collectAndEncrypt("r3n", hsv);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var processedKeys = new Set();
|
||||
|
||||
// 返回三个函数的数组
|
||||
return [
|
||||
// 1. 主要的数据收集函数
|
||||
collectAndEncrypt,
|
||||
|
||||
// 2. 带去重保护的数据收集函数
|
||||
function (key, value) {
|
||||
if (!processedKeys.has(key)) {
|
||||
processedKeys.add(key);
|
||||
collectAndEncrypt(key, value);
|
||||
}
|
||||
},
|
||||
|
||||
// 3. 最终生成加密字符串的函数
|
||||
function (finalKey) {
|
||||
var finalRandomGen = createRandomGenerator(djb2HashString(finalKey) ^ 1809053797, timeBasedRandom);
|
||||
collectAndEncrypt("bpc", ++callCounter);
|
||||
|
||||
// 对收集的数据进行最终加密
|
||||
var finalEncrypted = [];
|
||||
for (var i = 0; i < encryptedData.length; i++) {
|
||||
finalEncrypted.push(encryptedData[i] ^ finalRandomGen());
|
||||
}
|
||||
|
||||
// 添加结束标记
|
||||
finalEncrypted.push(randomGenerator(true) ^ 125 ^ finalRandomGen());
|
||||
|
||||
// Base64编码
|
||||
var resultBytes = finalEncrypted;
|
||||
var resultChars = [];
|
||||
var baseValue = timeBasedRandom;
|
||||
|
||||
for (var pos = 0; pos < resultBytes.length;) {
|
||||
var triplet = (--baseValue & 255 ^ resultBytes[pos++]) << 16 |
|
||||
(--baseValue & 255 ^ resultBytes[pos++]) << 8 |
|
||||
--baseValue & 255 ^ resultBytes[pos++];
|
||||
|
||||
resultChars.push(String.fromCharCode(mapChar(triplet >> 18 & 63)));
|
||||
resultChars.push(String.fromCharCode(mapChar(triplet >> 12 & 63)));
|
||||
resultChars.push(String.fromCharCode(mapChar(triplet >> 6 & 63)));
|
||||
resultChars.push(String.fromCharCode(mapChar(triplet & 63)));
|
||||
}
|
||||
|
||||
// 处理剩余字节
|
||||
if (resultBytes.length % 3) {
|
||||
resultChars.length -= 3 - (resultBytes.length % 3);
|
||||
}
|
||||
|
||||
return resultChars.join("");
|
||||
}
|
||||
];
|
||||
};
|
||||
})();
|
||||
|
||||
// 创建一个工具函数来生成JSPL
|
||||
function createJSPLGenerator(dateTimeStamp) {
|
||||
return {
|
||||
generate: function (sessionData, fingerprintData) {
|
||||
// let dateTimeStamp = Math.floor(Date.now() / 1000)
|
||||
// console.log("dateTimeStamp : " + dateTimeStamp)
|
||||
// 使用会话数据作为输入
|
||||
var functions = zn(sessionData, dateTimeStamp);
|
||||
var collect = functions[1]; // 收集函数
|
||||
var generate = functions[2]; //加密函数
|
||||
|
||||
// 收集指纹数据
|
||||
for (var key in fingerprintData) {
|
||||
if (fingerprintData.hasOwnProperty(key)) {
|
||||
collect(key, fingerprintData[key]);
|
||||
}
|
||||
}
|
||||
|
||||
// 生成并返回JSPL
|
||||
return generate("jspl");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// print process.argv
|
||||
// process.argv.forEach(function (val, index, array) {
|
||||
// console.log(index + ': ' + val);
|
||||
// });
|
||||
var fingerprint = undefined
|
||||
var dateTimeStamp = undefined
|
||||
if (process.argv[2] != undefined) {
|
||||
fingerprint = JSON.parse(process.argv[2])
|
||||
}
|
||||
dateTimeStamp = JSON.parse(process.argv[3])
|
||||
|
||||
// main
|
||||
// if (dateTimeStamp == undefined) {
|
||||
// dateTimeStamp = Math.floor(Date.now() / 1000)
|
||||
// }
|
||||
// let dateTimeStamp = Math.floor(Date.now() / 1000)
|
||||
// let dateTimeStamp = 1754908260
|
||||
|
||||
// console.log(dateTimeStamp)
|
||||
// 使用示例
|
||||
let jsplGenerator = createJSPLGenerator(dateTimeStamp);
|
||||
|
||||
// fingerprint = {
|
||||
// "nddc": 1,
|
||||
// "r3n": 33,
|
||||
// "exp8": 0,
|
||||
// "uid": null,
|
||||
// "bci": true,
|
||||
// "bcl": 0.8,
|
||||
// "bct": "Infinity",
|
||||
// "bdt": "Infinity",
|
||||
// "dp0": false,
|
||||
// "ucdv": false,
|
||||
// "wdifrm": false,
|
||||
// "iwgl": "undefined",
|
||||
// "npmtm": false,
|
||||
// "wdif": false,
|
||||
// "wdifpnh": 2800984568,
|
||||
// "lg": "fr-FR",
|
||||
// "isb": false,
|
||||
// "idp": true,
|
||||
// "crt": 0,
|
||||
// "vnd": "Google Inc.",
|
||||
// "bid": "NA",
|
||||
// "med": "defined",
|
||||
// "pltod": false,
|
||||
// "csssp": "",
|
||||
// "awe": false,
|
||||
// "phe": false,
|
||||
// "dat": false,
|
||||
// "nm": false,
|
||||
// "geb": false,
|
||||
// "sqt": false,
|
||||
// "pf": "Linux armv81",
|
||||
// "hc": 8,
|
||||
// "br_oh": 745,
|
||||
// "br_ow": 393,
|
||||
// "ua": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||
// "wbd": false,
|
||||
// "ts_mtp": 5,
|
||||
// "mob": true,
|
||||
// "lgs": ["fr-FR", "en-US", "zh-CN", "zh", "fr", "en"],
|
||||
// "dvm": 4,
|
||||
// "hcovdr": false,
|
||||
// "plovdr": false,
|
||||
// "ftsovdr": false,
|
||||
// "orf": "debug",
|
||||
// "ttst": 0.8517814137469564,
|
||||
// "br_w": 393,
|
||||
// "br_h": 745,
|
||||
// "br_iw": 513,
|
||||
// "br_ih": 847,
|
||||
// "ars_w": 393,
|
||||
// "ars_h": 876,
|
||||
// "rs_w": 393,
|
||||
// "rs_h": 876,
|
||||
// "rs_cd": 24,
|
||||
// "pr": 2.75,
|
||||
// "so": "portrait-primary",
|
||||
// "vco": "",
|
||||
// "vcots": false,
|
||||
// "vch": "probably",
|
||||
// "vchts": true,
|
||||
// "vcw": "probably",
|
||||
// "vcwts": true,
|
||||
// "vc3": "maybe",
|
||||
// "vc3ts": false,
|
||||
// "vcmp": "",
|
||||
// "vcmpts": false,
|
||||
// "vcq": "",
|
||||
// "vcqts": false,
|
||||
// "vc1": "probably",
|
||||
// "vc1ts": true,
|
||||
// "cssS": "3.93,0.39,12.24,9.75,5.64,10.98,13.46,2.19,6.51",
|
||||
// "css0": "7,75,0",
|
||||
// "css1": "9.74354,0.354646,-0.00922698,0.000685511,0.203723,-5.61673,-0.755238,0.0561098,-0.0279023,0.481607,-10.9534,0.813777,-0.375565,6.48243,-147.433,11.9534",
|
||||
// "cssH": "15px",
|
||||
// "plu": "",
|
||||
// "plgod": false,
|
||||
// "plg": 0,
|
||||
// "plgne": "NA",
|
||||
// "plgre": "NA",
|
||||
// "plgof": "NA",
|
||||
// "plggt": "NA",
|
||||
// "mmt": "empty",
|
||||
// "bchk": "3223aeb6721e0d0917e792818d193ac88dcd62fad5cad7bf7a2b2b473ecf58ee60f018dbdb1a5832e8dc6528387b0745971dbcd82387261e9a4e3f",
|
||||
// "nt_tcp": 0,
|
||||
// "nt_dns": 0,
|
||||
// "nt_rd": 0,
|
||||
// "nt_irt": -29.600000008940697,
|
||||
// "nt_rt": 1129,
|
||||
// "nt_tls": 6.700000002980232,
|
||||
// "nt_ttf": 1166.7000000029802,
|
||||
// "nt_swt": 22.900000005960464,
|
||||
// "nt_csd": 411060,
|
||||
// "nt_nhp": "h2",
|
||||
// "nt_rdc": 0,
|
||||
// "nt_it": "navigation",
|
||||
// "nt_prs": 6.700000002980232,
|
||||
// "nt_esc": 0,
|
||||
// "nt_ttrd": null,
|
||||
// "nt_le": 3.0999999940395355,
|
||||
// "nt_dcle": 141.79999999701977,
|
||||
// "nt_di": 1415.2000000029802,
|
||||
// "nt_dc": 2862.6000000089407,
|
||||
// "ccsT": "Error\nat S (https://d.digital.hermes/tags.js:173:22)\nat Un.C (https://d.digital.hermes/tags.js:1252:41\nat nrWrapper (https://www.hermes.com/fr/fr/category/femme/Sacs%20et%20pochettes%20pour%20Femme%20_%20Herme%CC%80s%20France.html:7:13468)",
|
||||
// "ccsB": "tags.js:1252:41 at nrWrapper (sac-p-tit-arcon-H085871CKAO.html:7:13468)",
|
||||
// "ccsH": "1050544242",
|
||||
// "ccsV": ",993b46baf0942a343b7e6b02fa3f8eef64727f077d3b0055af56e6994dcaf046",
|
||||
// "muev": false,
|
||||
// "pro_t": true,
|
||||
// "wglo": true,
|
||||
// "prso": true,
|
||||
// "wbst": true,
|
||||
// "psn": true,
|
||||
// "edp": true,
|
||||
// "addt": true,
|
||||
// "wsdc": true,
|
||||
// "ccsr": true,
|
||||
// "nuad": true,
|
||||
// "bcda": true,
|
||||
// "idn": true,
|
||||
// "capi": true,
|
||||
// "svde": true,
|
||||
// "vpbq": true,
|
||||
// "mq": "aptr:coarse,ahvr:none",
|
||||
// "aco": "probably",
|
||||
// "acots": false,
|
||||
// "acmp": "probably",
|
||||
// "acmpts": true,
|
||||
// "acw": "probably",
|
||||
// "acwts": false,
|
||||
// "acma": "maybe",
|
||||
// "acmats": false,
|
||||
// "acaa": "probably",
|
||||
// "acaats": true,
|
||||
// "ac3": "",
|
||||
// "ac3ts": false,
|
||||
// "acf": "probably",
|
||||
// "acfts": false,
|
||||
// "acmp4": "maybe",
|
||||
// "acmp4ts": false,
|
||||
// "acmp3": "probably",
|
||||
// "acmp3ts": false,
|
||||
// "acwm": "maybe",
|
||||
// "acwmts": false,
|
||||
// "ocpt": false,
|
||||
// "ckwa": false,
|
||||
// "spwn": false,
|
||||
// "emt": false,
|
||||
// "bfr": false,
|
||||
// "tz": -120,
|
||||
// "hdn": false,
|
||||
// "xt1": false,
|
||||
// "cdhf": false,
|
||||
// "eva": 33,
|
||||
// "cokys": ",loadTimes,csi,app",
|
||||
// "ecpc": false,
|
||||
// "nhi": ",64,true,Nexus 5,Android,6.0,138.0.7204.184,false",
|
||||
// "k_lyts": 48,
|
||||
// "k_lytk": "kg20va`l\u00a7'w8mh.71pdfoqcn[zy365x/\\,-4bt9siu=j;r]e",
|
||||
// "emd": "k:ai,vi,ao",
|
||||
// "wwl": false,
|
||||
// "glvd": "Google Inc. (ARM)",
|
||||
// "glrd": "ANGLE (ARM,Mali-G57 MC2,OpenGL ES 3.2)",
|
||||
// "tzp": "Europe/Paris",
|
||||
// "isf": true,
|
||||
// "isf2": false,
|
||||
// "dt": false,
|
||||
// "fph": 416468867,
|
||||
// "jset": 1754750959
|
||||
// }
|
||||
|
||||
// console.log("received fringerprint is :"+fingerprint)
|
||||
// console.log(fingerprint)
|
||||
let jspl = jsplGenerator.generate("user_session_12345", fingerprint);
|
||||
console.log(jspl);
|
||||
@@ -0,0 +1,189 @@
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
|
||||
def encrpte_to_jspl(fingerprint_json):
|
||||
dir = os.path.dirname(__file__)
|
||||
# print(fingerprint_json)
|
||||
_timestamp = int(time.time())
|
||||
p = subprocess.Popen(['node', dir + '/jspl_encoder.js', fingerprint_json, str(_timestamp)], stdout=subprocess.PIPE)
|
||||
encrypted_fingerprint = p.stdout.read()
|
||||
_result = encrypted_fingerprint.decode('utf-8')
|
||||
return _result
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
fingerprint = {
|
||||
"nddc": 1,
|
||||
"r3n": 33,
|
||||
"exp8": 0,
|
||||
"uid": None,
|
||||
"bci": True,
|
||||
"bcl": 0.8,
|
||||
"bct": "Infinity",
|
||||
"bdt": "Infinity",
|
||||
"dp0": False,
|
||||
"ucdv": False,
|
||||
"wdifrm": False,
|
||||
"iwgl": "undefined",
|
||||
"npmtm": False,
|
||||
"wdif": False,
|
||||
"wdifpnh": 2800984568,
|
||||
"lg": "fr-FR",
|
||||
"isb": False,
|
||||
"idp": True,
|
||||
"crt": 0,
|
||||
"vnd": "Google Inc.",
|
||||
"bid": "NA",
|
||||
"med": "defined",
|
||||
"pltod": False,
|
||||
"csssp": "",
|
||||
"awe": False,
|
||||
"phe": False,
|
||||
"dat": False,
|
||||
"nm": False,
|
||||
"geb": False,
|
||||
"sqt": False,
|
||||
"pf": "Linux armv81",
|
||||
"hc": 8,
|
||||
"br_oh": 745,
|
||||
"br_ow": 393,
|
||||
"ua": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||
"wbd": False,
|
||||
"ts_mtp": 5,
|
||||
"mob": True,
|
||||
"lgs": ["fr-FR", "en-US", "zh-CN", "zh", "fr", "en"],
|
||||
"dvm": 4,
|
||||
"hcovdr": False,
|
||||
"plovdr": False,
|
||||
"ftsovdr": False,
|
||||
"orf": "debug",
|
||||
"ttst": 0.8517814137469564,
|
||||
"br_w": 393,
|
||||
"br_h": 745,
|
||||
"br_iw": 513,
|
||||
"br_ih": 847,
|
||||
"ars_w": 393,
|
||||
"ars_h": 876,
|
||||
"rs_w": 393,
|
||||
"rs_h": 876,
|
||||
"rs_cd": 24,
|
||||
"pr": 2.75,
|
||||
"so": "portrait-primary",
|
||||
"vco": "",
|
||||
"vcots": False,
|
||||
"vch": "probably",
|
||||
"vchts": True,
|
||||
"vcw": "probably",
|
||||
"vcwts": True,
|
||||
"vc3": "maybe",
|
||||
"vc3ts": False,
|
||||
"vcmp": "",
|
||||
"vcmpts": False,
|
||||
"vcq": "",
|
||||
"vcqts": False,
|
||||
"vc1": "probably",
|
||||
"vc1ts": True,
|
||||
"cssS": "3.93,0.39,12.24,9.75,5.64,10.98,13.46,2.19,6.51",
|
||||
"css0": "7,75,0",
|
||||
"css1": "9.74354,0.354646,-0.00922698,0.000685511,0.203723,-5.61673,-0.755238,0.0561098,-0.0279023,0.481607,-10.9534,0.813777,-0.375565,6.48243,-147.433,11.9534",
|
||||
"cssH": "15px",
|
||||
"plu": "",
|
||||
"plgod": False,
|
||||
"plg": 0,
|
||||
"plgne": "NA",
|
||||
"plgre": "NA",
|
||||
"plgof": "NA",
|
||||
"plggt": "NA",
|
||||
"mmt": "empty",
|
||||
"bchk": "3223aeb6721e0d0917e792818d193ac88dcd62fad5cad7bf7a2b2b473ecf58ee60f018dbdb1a5832e8dc6528387b0745971dbcd82387261e9a4e3f",
|
||||
"nt_tcp": 0,
|
||||
"nt_dns": 0,
|
||||
"nt_rd": 0,
|
||||
"nt_irt": -29.600000008940697,
|
||||
"nt_rt": 1129,
|
||||
"nt_tls": 6.700000002980232,
|
||||
"nt_ttf": 1166.7000000029802,
|
||||
"nt_swt": 22.900000005960464,
|
||||
"nt_csd": 411060,
|
||||
"nt_nhp": "h2",
|
||||
"nt_rdc": 0,
|
||||
"nt_it": "navigation",
|
||||
"nt_prs": 6.700000002980232,
|
||||
"nt_esc": 0,
|
||||
"nt_ttrd": None,
|
||||
"nt_le": 3.0999999940395355,
|
||||
"nt_dcle": 141.79999999701977,
|
||||
"nt_di": 1415.2000000029802,
|
||||
"nt_dc": 2862.6000000089407,
|
||||
"ccsT": "Error\nat S (https://d.digital.hermes/tags.js:173:22)\nat Un.C (https://d.digital.hermes/tags.js:1252:41\nat nrWrapper (https://www.hermes.com/fr/fr/category/femme/Sacs%20et%20pochettes%20pour%20Femme%20_%20Herme%CC%80s%20France.html:7:13468)",
|
||||
"ccsB": "tags.js:1252:41 at nrWrapper (sac-p-tit-arcon-H085871CKAO.html:7:13468)",
|
||||
"ccsH": "1050544242",
|
||||
"ccsV": ",993b46baf0942a343b7e6b02fa3f8eef64727f077d3b0055af56e6994dcaf046",
|
||||
"muev": False,
|
||||
"pro_t": True,
|
||||
"wglo": True,
|
||||
"prso": True,
|
||||
"wbst": True,
|
||||
"psn": True,
|
||||
"edp": True,
|
||||
"addt": True,
|
||||
"wsdc": True,
|
||||
"ccsr": True,
|
||||
"nuad": True,
|
||||
"bcda": True,
|
||||
"idn": True,
|
||||
"capi": True,
|
||||
"svde": True,
|
||||
"vpbq": True,
|
||||
"mq": "aptr:coarse,ahvr:none",
|
||||
"aco": "probably",
|
||||
"acots": False,
|
||||
"acmp": "probably",
|
||||
"acmpts": True,
|
||||
"acw": "probably",
|
||||
"acwts": False,
|
||||
"acma": "maybe",
|
||||
"acmats": False,
|
||||
"acaa": "probably",
|
||||
"acaats": True,
|
||||
"ac3": "",
|
||||
"ac3ts": False,
|
||||
"acf": "probably",
|
||||
"acfts": False,
|
||||
"acmp4": "maybe",
|
||||
"acmp4ts": False,
|
||||
"acmp3": "probably",
|
||||
"acmp3ts": False,
|
||||
"acwm": "maybe",
|
||||
"acwmts": False,
|
||||
"ocpt": False,
|
||||
"ckwa": False,
|
||||
"spwn": False,
|
||||
"emt": False,
|
||||
"bfr": False,
|
||||
"tz": -120,
|
||||
"hdn": False,
|
||||
"xt1": False,
|
||||
"cdhf": False,
|
||||
"eva": 33,
|
||||
"cokys": ",loadTimes,csi,app",
|
||||
"ecpc": False,
|
||||
"nhi": ",64,true,Nexus 5,Android,6.0,138.0.7204.184,false",
|
||||
"k_lyts": 48,
|
||||
"k_lytk": "kg20va`l\u00a7'w8mh.71pdfoqcn[zy365x/\\,-4bt9siu=j;r]e",
|
||||
"emd": "k:ai,vi,ao",
|
||||
"wwl": False,
|
||||
"glvd": "Google Inc. (ARM)",
|
||||
"glrd": "ANGLE (ARM,Mali-G57 MC2,OpenGL ES 3.2)",
|
||||
"tzp": "Europe/Paris",
|
||||
"isf": True,
|
||||
"isf2": False,
|
||||
"dt": False,
|
||||
"fph": 416468867,
|
||||
"jset": 1754750959
|
||||
}
|
||||
fingerprint_json = json.dumps(fingerprint)
|
||||
print(encrpte_to_jspl(fingerprint_json))
|
||||
@@ -0,0 +1,423 @@
|
||||
nddc:1 --> OK, 1, 需要从网页中获得
|
||||
数值应该就是1
|
||||
var nddc;
|
||||
try {
|
||||
if ((nddc = (document.cookie.match(/datadome=/g) || []).length) > 1) {
|
||||
t.deleteAllDDCookies();
|
||||
}
|
||||
} catch (n) {
|
||||
nddc = "err";
|
||||
}
|
||||
|
||||
r3n:33
|
||||
r3n 数值是window._hsv 的值,如果没有window._hsv的值,那么返回33
|
||||
// var hsv = typeof window._hsv == "string" && window._hsv.length > 0 ||
|
||||
// typeof window._hsv == "number" && !isNaN(window._hsv) ? window._hsv : 33;
|
||||
exp8:0
|
||||
固定是0
|
||||
uid:null
|
||||
默认为null
|
||||
n.i("uid", t.getCookie("correlation_id"));
|
||||
bci:true
|
||||
bcl:0.8
|
||||
bct:Infinity
|
||||
bdt:Infinity
|
||||
window.navigator.getBattery().then(function (batteryManager) {
|
||||
n("bci", batteryManager.charging);
|
||||
n("bcl", batteryManager.level);
|
||||
n("bct", batteryManager.chargingTime);
|
||||
n("bdt", batteryManager.dischargingTime);
|
||||
});
|
||||
|
||||
dp0:false
|
||||
默认为false ?
|
||||
ucdv:false
|
||||
默认为false
|
||||
ucdv = typeof objectToInspect != "undefined" && objectToInspect === "null" && typeof result != "undefined" && !!result)
|
||||
wdifrm:false
|
||||
默认为false
|
||||
iwgl:undefined ??
|
||||
|
||||
|
||||
npmtm:false
|
||||
默认为false
|
||||
wdif:false
|
||||
|
||||
wdifpnh:2800984568
|
||||
|
||||
|
||||
|
||||
lg:fr-FR
|
||||
n("lg", window.navigator.language || window.navigator.userLanguage || window.navigator.browserLanguage || window.navigator.systemLanguage || "");
|
||||
isb:false
|
||||
n("isb", !!window.navigator.brave);
|
||||
idp:true
|
||||
crt:0
|
||||
crt = window.navigator.connection && window.navigator.connection['rtt']
|
||||
vnd:Google Inc.
|
||||
OK
|
||||
|
||||
bid:NA
|
||||
OK
|
||||
med:defined
|
||||
OK
|
||||
pltod:false
|
||||
默认为false
|
||||
csssp:
|
||||
为空
|
||||
awe:false
|
||||
默认为false
|
||||
phe:false
|
||||
默认为false
|
||||
dat:false
|
||||
默认为false
|
||||
nm:false
|
||||
默认为false
|
||||
geb:false
|
||||
默认为false
|
||||
sqt:false
|
||||
默认为false
|
||||
pf:MacIntel
|
||||
pf = window.navigator.platform
|
||||
hc:12
|
||||
ok
|
||||
br_oh:847
|
||||
ok
|
||||
br_ow:513
|
||||
ok
|
||||
ua:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36
|
||||
ok
|
||||
wbd:false
|
||||
默认为false
|
||||
ts_mtp:0
|
||||
ok
|
||||
mob:true
|
||||
mob = navigator.userAgentData?navigator.userAgentData.mobile:"NA"
|
||||
lgs:["fr-FR","en-US","zh-CN","zh","fr","en"]
|
||||
lgs=JSON.stringify(navigator.languages)
|
||||
dvm:8
|
||||
ok
|
||||
hcovdr:false
|
||||
默认为false
|
||||
plovdr:false
|
||||
默认为false
|
||||
ftsovdr:false
|
||||
默认为false
|
||||
|
||||
orf:debug
|
||||
|
||||
trrd:0.5678095129748595
|
||||
0到1之间的,小数后面有15位的随机数
|
||||
|
||||
br_w:513
|
||||
ok
|
||||
br_h:847
|
||||
ok
|
||||
br_iw:513
|
||||
window.innerWidth || 0
|
||||
br_ih:847
|
||||
window.innerHeight || 0
|
||||
ars_w:513
|
||||
ok
|
||||
ars_h:847
|
||||
ok
|
||||
rs_w:513
|
||||
ok
|
||||
rs_h:847
|
||||
ok
|
||||
rs_cd:24
|
||||
ok
|
||||
pr:2
|
||||
ok
|
||||
so:portrait-primary
|
||||
ok
|
||||
vco:
|
||||
ok
|
||||
vcots:false
|
||||
ok
|
||||
vch:probably
|
||||
ok
|
||||
vchts:true
|
||||
ok
|
||||
vcw:probably
|
||||
ok
|
||||
vcwts:true
|
||||
ok
|
||||
vc3:maybe
|
||||
ok
|
||||
vc3ts:false
|
||||
ok
|
||||
vcmp:
|
||||
ok
|
||||
vcmpts:false
|
||||
ok
|
||||
vcq:
|
||||
ok
|
||||
vcqts:false
|
||||
ok
|
||||
vc1:probably
|
||||
ok
|
||||
vc1ts:true
|
||||
ok
|
||||
|
||||
cssS:3.93,0.39,12.24,9.75,5.64,10.98,13.46,2.19,6.51
|
||||
|
||||
css0:7, 75, 0
|
||||
|
||||
css1:9.74354, 0.354646, -0.00922698, 0.000685511, 0.203723, -5.61673, -0.755238, 0.0561098, -0.0279023, 0.481607, -10.9534, 0.813777, -0.375565, 6.48243, -147.433, 11.9534
|
||||
|
||||
cssH:15px
|
||||
|
||||
plu:empty
|
||||
plgod:false
|
||||
plg:0
|
||||
plgne:NA
|
||||
plgre:NA
|
||||
plgof:NA
|
||||
plggt:NA
|
||||
|
||||
mmt:empty
|
||||
bchk:3223aeb6721e0d0917e7928181193ac88dcd62fad5cadfbe7a2b2b473ecf58ee70f098dbdb1a1832e8dc6528387b0745971dbcd82384261e9a4e3f
|
||||
for (var n = ["AppBannerPromptResult", "webkitRTCPeerConnection", "webkitAudioContext", "webkitRequestAnimationFrame", "chrome.runtime",
|
||||
"chrome.webstore", "console.context", "InputMethodContext", "SVGAnimationElement", "SVGPathSegList", "PasswordCredential", "ViewTransition",
|
||||
"VisualViewport.prototype.segments", "DeprecationReportBody", "MathMLElement", "opr", "CSS2Properties.prototype.colorScheme", "WebKitCSSMatrix",
|
||||
"SVGTextPositioningElement", "XMLHttpRequestEventTarget", "TextDecoderStream", "onloadend", "WritableStream", "TransformStream", "TextTrackCue",
|
||||
"-283", "VisualViewport", "StyleSheet", "RTCDtlsTransport", "Atomics", "StaticRange", "UIEvent", "VideoStreamTrack", "OfflineResourceList",
|
||||
"SVGGeometryElement", "RTCDataChannel", "VTTRegion", "AbortController", "Controllers", "onanimationcancel",
|
||||
"SVGDocument", "IIRFilterNode", "RTCStatsReport", "MediaStreamTrack", "CSS2Properties.prototype.MozOsxFontSmoothing", "CropTarget", "BatteryManager",
|
||||
"LaunchQueue", "CSSFontPaletteValuesRule", "PushSubscriptionOptions", "DOMSettableTokenList", "RTCTrackEvent",
|
||||
"MozSmsMessage", "ServiceWorkerContainer", "CanvasCaptureMediaStream", "DeviceStorage", "XPathNSResolver", "SmartCardEvent", "WeakSet",
|
||||
"MozMobileMessageManager", "External.prototype.getHostEnvironmentValue", "WindowUtils", "XPathNamespace", "SVGFEDropShadowElement",
|
||||
"SharedWorker", "WorkerMessageEvent", "CSS2Properties.prototype.MozOSXFontSmoothing", "AudioSinkInfo",
|
||||
"Notification.prototype.image", "ContentVisibilityAutoStateChangeEvent", "PerformanceResourceTiming.prototype.renderBlockingStatus", "console.createTask",
|
||||
"PerformanceServerTiming", "CanvasFilter", "structuredClone", "onslotchange", "EyeDropper", "URLPattern", "VideoFrame", "WritableStreamDefaultController", "SharedArrayBuffer",
|
||||
"CSSCounterStyleRule", "CustomStateSet", "ReadableStreamDefaultController", "XMLDocument.prototype.hasStorageAccess",
|
||||
"CryptoKey", "SubmitEvent", "MediaMetadata", "VideoPlaybackQuality", "ReadableStreamDefaultReader", "UserActivation", "FragmentDirective",
|
||||
"WebKitMediaKeyError", "RTCRtpTransceiver.prototype.stop", "Scheduling", "EventCounts", "VideoTrackList", "SourceBuffer", "RTCError", "FontFaceSet", "CSSCharsetRule", "MediaDeviceInfo",
|
||||
"RTCPeerConnectionIceErrorEvent", "RTCSctpTransport", "MediaSessionCoordinator", "XULPopupElement", "MediaSourceHandle",
|
||||
"366", "__REACT_DEVTOOLS_GLOBAL_HOOK__", "ShadowRealm", "HTMLSlotElement", "DetachedViewControlEvent", "GeolocationPosition", "SiteBoundCredential", "MediaSource",
|
||||
"WebTransport", "GPUSupportedLimits", "ToggleEvent"], bchk = "", e = 0; e < n.length; e++) {
|
||||
for (var r = n[e].split("."), i = window, o = true, c = 0; c < r.length; c++) {
|
||||
var s = r[c];
|
||||
if (!(s in i)) {
|
||||
o = false;
|
||||
break;
|
||||
}
|
||||
if (c < r.length - 1) {
|
||||
i = i[s];
|
||||
}
|
||||
}
|
||||
if (o) {
|
||||
bchk += "52738db37a1ea50137e79e8181193ac872cd325ba5cacfbe7aab5b36b9c9879e7c0018dbd31a1832a8dc6528387b67451719dcd8b784a518904e3f07c69b9d30"[e];
|
||||
|
||||
} else {
|
||||
bchk += "3829ae9642df0d791e41d2159da28bd18d056afadf1bd70fc9222a473eaf58e860ff950e7bf35b66e4aa90b156c80c96913dbd9c23c7262e4adbc3ddd77ff263"[e];
|
||||
}
|
||||
}
|
||||
|
||||
nt_tcp:0
|
||||
var performanceNavigationTiming = window.performance.getEntriesByType && window.performance.getEntriesByType("navigation")[0];
|
||||
nt_tcp = performanceNavigationTiming.connectEnd - performanceNavigationTiming.connectStart
|
||||
nt_dns:0
|
||||
|
||||
nt_dns =performanceNavigationTiming.domainLookupEnd - performanceNavigationTiming.domainLookupStart
|
||||
nt_rd:0
|
||||
nt_rd = performanceNavigationTiming.redirectEnd - performanceNavigationTiming.redirectStart
|
||||
nt_irt:-3.400000002235174
|
||||
nt_irt = performanceNavigationTiming.firstInterimResponseStart - performanceNavigationTiming.requestStart
|
||||
nt_rt:0
|
||||
nt_rt = performanceNavigationTiming.responseStart - performanceNavigationTiming.requestStart
|
||||
nt_tls:3.400000002235174
|
||||
let nt_tls = performanceNavigationTiming.requestStart - performanceNavigationTiming.secureConnectionStart
|
||||
nt_ttf:3.099999997764826
|
||||
let nt_ttf = performanceNavigationTiming.responseEnd - performanceNavigationTiming.fetchStart
|
||||
nt_swt:3.400000002235174
|
||||
let nt_swt = performanceNavigationTiming.fetchStart - performanceNavigationTiming.workerStart
|
||||
nt_csd:0
|
||||
let nt_csd = performanceNavigationTiming.decodedBodySize - performanceNavigationTiming.encodedBodySize
|
||||
nt_nhp:
|
||||
let nt_nhp = performanceNavigationTiming.nextHopProtocol
|
||||
nt_rdc:0
|
||||
let nt_rdc = performanceNavigationTiming.redirectCount
|
||||
nt_it:navigation
|
||||
let nt_it = performanceNavigationTiming.initiatorType
|
||||
nt_prs:0
|
||||
let nt_prs = performanceNavigationTiming.requestStart - performanceNavigationTiming.connectEnd
|
||||
nt_esc:-3.400000002235174
|
||||
let nt_esc = performanceNavigationTiming.secureConnectionStart - performanceNavigationTiming.connectStart
|
||||
nt_ttrd:-2
|
||||
e = performanceNavigationTiming.secureConnectionStart - performanceNavigationTiming.connectStart
|
||||
nt_ttrd = (e - (e = performanceNavigationTiming.connectEnd - performanceNavigationTiming.connectStart)) / e)
|
||||
nt_le:0
|
||||
nt_le = performanceNavigationTiming.loadEventEnd - performanceNavigationTiming.loadEventStart
|
||||
nt_dcle:0.10000000149011612
|
||||
nt_dcle = performanceNavigationTiming.domContentLoadedEventEnd - performanceNavigationTiming.domContentLoadedEventStart
|
||||
nt_di:74.80000000074506
|
||||
nt_di = performanceNavigationTiming.domInteractive
|
||||
nt_dc:0
|
||||
nt_dc = performanceNavigationTiming.domComplete
|
||||
ccsT:Error
|
||||
at S (https://d.digital.hermes/tags.js:173:22)
|
||||
at Un.C (https://d.digital.hermes/tags.js:1252:41
|
||||
ccsB:/tags.js:1252:41
|
||||
at nrWrapper (file:///Users/lpan/Downloads/Sacs%20et%20pochettes%20pour%20Femme%20_%20Herme%CC%80s%20France.html:7:13468)
|
||||
|
||||
ccsH:1050544242
|
||||
|
||||
ccsV:,993b46baf0942a343b7e6b02fa3f8eef64727f077d3b0055af56e6994dcaf046
|
||||
muev:false
|
||||
let muev = !!window.MutationEvent
|
||||
pro_t:true
|
||||
let pro_t = typeof window.Promise != "undefined" && !!window.Promise.try
|
||||
wglo:true
|
||||
!!window.WebGLObject
|
||||
prso:true
|
||||
!!window.PressureObserver
|
||||
wbst:true
|
||||
!!window.WebSocketStream
|
||||
psn:true
|
||||
!!window.PermissionStatus && window.PermissionStatus.prototype.hasOwnProperty('name')
|
||||
edp:true
|
||||
!!window.EyeDropper
|
||||
addt:true
|
||||
!window.AudioData
|
||||
wsdc:true
|
||||
!!window.WritableStreamDefaultController
|
||||
ccsr:true
|
||||
!!window.CSSCounterStyleRule
|
||||
nuad:true
|
||||
!!window.NavigatorUAData
|
||||
bcda:true
|
||||
!!window.BarcodeDetector
|
||||
idn:true
|
||||
!(!window.Intl || !window.Intl.DisplayNames)
|
||||
capi:false
|
||||
capi = !!(window.navigator && window.navigator.contacts && window.navigator[2])
|
||||
svde:false
|
||||
!!window.SVGDiscardElement
|
||||
vpbq:true
|
||||
!!(window.HTMLVideoElement && window.HTMLVideoElement.prototype && window.HTMLVideoElement.prototype.getVideoPlaybackQuality)
|
||||
mq:aptr:coarse, ahvr:none
|
||||
aco:probably
|
||||
var audioElement = document.createElement("audio");
|
||||
aco = audioElement.canPlayType("audio/ogg; codecs=\"vorbis\"")
|
||||
acots:false
|
||||
window.MediaSource.isTypeSupported("audio/ogg; codecs=\"vorbis\"")
|
||||
acmp:probably
|
||||
ok audioElement.canPlayType("audio/mpeg;")
|
||||
acmpts:true
|
||||
ok, default to true
|
||||
acw:probably
|
||||
ok, default to probably
|
||||
acwts:false
|
||||
ok, default to false
|
||||
acma:maybe
|
||||
ok, default to maybe
|
||||
acmats:false
|
||||
ok, default to false
|
||||
|
||||
acaa:probably
|
||||
ok, default to probably
|
||||
|
||||
acaats:true
|
||||
ok, default to true
|
||||
|
||||
ac3:
|
||||
default to empty: ""
|
||||
ac3ts:false
|
||||
ok, default to false
|
||||
|
||||
acf:probably
|
||||
ok, default to probably
|
||||
|
||||
acfts:false
|
||||
ok, default to false
|
||||
|
||||
acmp4:maybe
|
||||
ok, default to maybe
|
||||
|
||||
acmp4ts:false
|
||||
ok, default to false
|
||||
|
||||
acmp3:probably
|
||||
ok, default to probably
|
||||
|
||||
acmp3ts:false
|
||||
ok, default to false
|
||||
|
||||
acwm:maybe
|
||||
ok, default to maybe
|
||||
|
||||
acwmts:false
|
||||
ok, default to false
|
||||
|
||||
ocpt:false
|
||||
ok ocpt = audioElement.canPlayType.toString().indexOf('canPlayType') === -1
|
||||
ckwa:false
|
||||
ok, default to false
|
||||
spwn:false
|
||||
spwn = !!window.spawn
|
||||
emt:false
|
||||
emt = !!window.emit
|
||||
bfr:false
|
||||
bfr = !!window.Buffer
|
||||
tz:-120
|
||||
ok
|
||||
hdn:false
|
||||
hdn = !!window.hidden
|
||||
ok, default to false
|
||||
xt1:false
|
||||
xt1 = !!window.navigator.pdfViewerEnabled
|
||||
cdhf:false
|
||||
cdhf = window.hasFocus()
|
||||
eva:40
|
||||
eva = window.XMLDocument.toString().length
|
||||
cokys:,loadTimes,csi,app
|
||||
default to ",loadTimes,csi,app"
|
||||
var cokys = ""
|
||||
for (var v in window.chrome) {
|
||||
cokys += "," + v;
|
||||
}
|
||||
ecpc:false
|
||||
default to false
|
||||
ecpc = !!window.process
|
||||
|
||||
nhi:,64,true,Nexus 5,Android,6.0,138.0.7204.184,false
|
||||
let results = await window.navigator.userAgentData.getHighEntropyValues(["architecture", "bitness", "model", "platformVersion", "uaFullVersion", "wow64"])
|
||||
for (var e = ["architecture", "bitness", "mobile", "model", "platform", "platformVersion", "uaFullVersion", "wow64"], r = [], i = 0; i < e.length; i++) {
|
||||
r.push(results[e[i]]);
|
||||
}
|
||||
nhi = r.join(",");
|
||||
k_lyts:48
|
||||
k_lytk:kg20va`l§'w8mh.71pdfoqcn[zy365x/\,-4bt9siu=j;r]e
|
||||
let keyboardLayoutMap = await window.navigator.keyboard.getLayoutMap()
|
||||
let k_lyts = keyboardLayoutMap.size
|
||||
for (var e = "", r = window.Array.from(keyboardLayoutMap.values()), i = 0; i < r.length; i++) {
|
||||
e += r[i];
|
||||
}
|
||||
let k_lytk = e
|
||||
|
||||
//}
|
||||
//).catch(function (t) {
|
||||
// n("k_lyts", "Err: " + Q(t.message));
|
||||
//});
|
||||
|
||||
emd:k:ai,vi,ao
|
||||
ok
|
||||
wwl:false
|
||||
glvd:Google Inc. (Apple)
|
||||
ok
|
||||
glrd:ANGLE (Apple, ANGLE Metal Renderer: Apple M2 Pro, Unspecified Version)
|
||||
ok
|
||||
tzp:Europe/Paris
|
||||
ok: Intl.DateTimeFormat().resolvedOptions().timeZone
|
||||
isf:true
|
||||
isf = window.outerHeight - window.innerHeight <= 1
|
||||
isf2:false
|
||||
isf2 = window.matchMedia && window.matchMedia("(display-mode: fullscreen)").matches
|
||||
dt:false
|
||||
dt = (window.outerHeight - window.innerHeight > 170)
|
||||
fph:416468867
|
||||
|
||||
jset:1754233764
|
||||
jset = Math.floor(Date.now() / 1000)
|
||||
@@ -1,6 +1,8 @@
|
||||
import json
|
||||
import random
|
||||
import time
|
||||
|
||||
from captcha.jspl_encoder_wrapper import encrpte_to_jspl
|
||||
from models.jsdata_pojo import JsDataPojo
|
||||
|
||||
|
||||
@@ -21,9 +23,29 @@ from models.jsdata_pojo import JsDataPojo
|
||||
class JsDataLeTypePojo(JsDataPojo):
|
||||
|
||||
def __init__(self, glrd, glvd, hc, br_oh, ua, br_ow, br_h, br_w, rs_h, rs_w, rs_cd, ars_h, ars_w, plg, eva, plu,
|
||||
vnd, pr, ts_mtp, dvm, m_s_c, m_m_c, m_c_c, m_cm_r, m_ms_r, emd: str):
|
||||
vnd, pr, ts_mtp, dvm, m_s_c, m_m_c, m_c_c, m_cm_r, m_ms_r, emd: str, ccsB,
|
||||
br_iw=513, br_ih=847, pf="Linux armv81", mob=True,
|
||||
lgs=["fr-FR", "en-US", "zh-CN", "zh", "fr", "en"],
|
||||
orf="debug",
|
||||
bchk="3223aeb6721e0d0917e7928181193ac88dcd62fad5cadfbe7a2b2b473ecf58ee70f098dbdb1a1832e8dc6528387b0745971dbcd82384261e9a4e3f",
|
||||
nt_tcp=0, nt_dns=0, nt_rd=0, nt_irt=-3.400000002235174, nt_rt=0, nt_tls=3.400000002235174,
|
||||
nt_ttf=3.099999997764826, nt_swt=3.400000002235174, nt_csd=0, nt_nhp="", nt_rdc=0, nt_it="navigation",
|
||||
nt_prs=0, nt_esc=-3.400000002235174, nt_ttrd=-2, nt_le=0, nt_dcle=0.10000000149011612,
|
||||
nt_di=74.80000000074506, nt_dc=0, ccsT="""Error
|
||||
at S (https://d.digital.hermes/tags.js:173:22)
|
||||
at Un.C (https://d.digital.hermes/tags.js:1252:41
|
||||
at nrWrapper (https://www.hermes.com/fr/fr/category/femme/Sacs%20et%20pochettes%20pour%20Femme%20_%20Herme%CC%80s%20France.html:7:13468)""",
|
||||
ccsH="1050544242",
|
||||
ccsV=",993b46baf0942a343b7e6b02fa3f8eef64727f077d3b0055af56e6994dcaf046", muev=False, prso=True,
|
||||
nhi=",64,true,Nexus 5,Android,6.0,138.0.7204.184,false", k_lyts=48,
|
||||
k_lytk="kg20va`l§'w8mh.71pdfoqcn[zy365x/\,-4bt9siu=j;r]e", tzp="Europe/Paris", isf2=False):
|
||||
super().__init__(glrd, glvd, hc, br_oh, ua, br_ow, br_h, br_w, rs_h, rs_w, rs_cd, ars_h, ars_w, plg, eva, plu,
|
||||
vnd, pr, ts_mtp, dvm, emd=emd)
|
||||
vnd, pr, ts_mtp, dvm, emd=emd, ccsB=ccsB, br_iw=br_iw, br_ih=br_ih, pf=pf, mob=mob, lgs=lgs,
|
||||
orf=orf, bchk=bchk, nt_tcp=nt_tcp, nt_dns=nt_dns, nt_rd=nt_rd, nt_irt=nt_irt, nt_rt=nt_rt,
|
||||
nt_tls=nt_tls, nt_ttf=nt_ttf, nt_swt=nt_swt, nt_csd=nt_csd, nt_nhp=nt_nhp, nt_rdc=nt_rdc,
|
||||
nt_it=nt_it, nt_prs=nt_prs, nt_esc=nt_esc, nt_ttrd=nt_ttrd, nt_le=nt_le, nt_dcle=nt_dcle,
|
||||
nt_di=nt_di, nt_dc=nt_dc, ccsT=ccsT, ccsH=ccsH, ccsV=ccsV, muev=muev, prso=prso, nhi=nhi,
|
||||
k_lyts=k_lyts, k_lytk=k_lytk, tzp=tzp, isf2=isf2)
|
||||
self.jset = int(time.time()) # override from 4_34_2
|
||||
self.emd = emd
|
||||
self.dcok = ".hermes.com"
|
||||
@@ -50,14 +72,32 @@ class JsDataLeTypePojo(JsDataPojo):
|
||||
self.m_c_c = m_c_c
|
||||
self.m_cm_r = m_cm_r
|
||||
self.m_ms_r = m_ms_r
|
||||
self.cfpfe = "ZnVuY3Rpb24oKXt2YXIgbj10LGk9ZG9jdW1lbnRbJ1x4NzFceDc1XHg2NVx4NzJceDc5XHg1M1x4NjVceDZjXHg2NVx4NjNceDc0XHg2Zlx4NzInXShuKDQ2MSkpO2lmKGkpeyFmdW5jdGlvbiB0KCl7dHJ5e3ZhciBuPWlbJ1x4NzNceDY4XHg2MVx4NjRceDZmXHg3" # 4.40.0
|
||||
self.stcfp = "Ly9kLmRpZ2l0YWwuaGVybWVzL3RhZ3MuanM6Mjo4ODYzNSkKICAgIGF0IHQuZXhwb3J0cy5kZF9hZCAoaHR0cHM6Ly9kLmRpZ2l0YWwuaGVybWVzL3RhZ3MuanM6MjoxMDc3OTYpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjYzNzkw" # 4.40.0
|
||||
self.cfpfe = "KHIsbixvLGEpPT57aWYoZVtyXSllW3JdLnB1c2gobik7ZWxzZXt2YXIgcyxjO2lmKHZvaWQgMCE9PW8pZm9yKHZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxkPTA7ZDx1Lmxlbmd0aDtkKyspe3ZhciBsPXVbZF07aWYobC5nZXRB" # 5.1.5
|
||||
self.stcfp = "MjYxMzEpCmF0IGEgKGZpbGU6Ly8vVXNlcnMvbHBhbi9Eb2N1bWVudHMvd29ya3NwYWNlL3RhZ3NyZWNoZXJjaGUvNV8xXzUvU2FjcyUyMGV0JTIwcG9jaGV0dGVzJTIwcG91ciUyMEZlbW1lJTIwXyUyMEhlcm1lJUNDJTgwcyUyMEZyYW5jZS5odG1sOjc6Mjk4MjQp" # 5.1.5
|
||||
|
||||
|
||||
test_data_json = """{"glvd":"ARM","glrd":"Mali-G57 MC2","hc":5,"br_oh":620,"br_ow":360,"br_h":620,"br_w":360,"rs_h":804,"rs_w":360,"rs_cd":24,"ars_h":804,"ars_w":360,"plg":2,"eva":33,"vnd":"Google Inc.","plu":["eTJjZUp","iZMOHLs1"],"ua":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36","dvm":4,"acw":"probably","pr":3,"ts_mtp":5,"tz":-120,"emd":"k:ai,vi,ao,vi d:defau,8f9de,defau,24476 g:4e652,f9991,defau,d5801","cookiesStr":"app.sig=_FqS3_SPN2D40Z4Qlq-_ybxzRvQ;datadome=VSGCNMYkY6L81typRJUpurlyd39dHxdfxIYc6DzRWDT7_rtZ8UodGcbow1okQR2zg_t4d_NcP0rC1ZHNz3XSDAGFZCJhFI49lai~x2Nb2unkhOlY8o4E04Wjmde~auDZ;app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiLW9jbktLVXAzMjVTOEFEdFpLUU9kSXlMIn0=;policy=accepted;lang=fr;"}"""
|
||||
|
||||
test_data_json = """{"glvd":"Google Inc. (ARM)","glrd":"ANGLE (ARM, Mali-G57 MC2, OpenGL ES 3.2)","hc":8,"br_oh":745,"br_ow":393,
|
||||
"br_h":745,"br_w":393,"rs_h":876,"rs_w":393,"rs_cd":24,"ars_h":876,"ars_w":393,"plg":0,"eva":33,
|
||||
"vnd":"Google Inc.","plu":[],"ua":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36","dvm":4,"acw":"probably",
|
||||
"pr":2.75,"ts_mtp":5,"tz":-120,"emd":"k:ai,vi,ao",
|
||||
"cookiesStr":"rskxRunCookie=0;datadome=GIfiRxEgyr5dwsnV0NoR9WPO3oA0CkMVLsqdvZLmuxHi81JFRbG7LaWKiAkSQRJTBkv3qBkGlCOC3uR00yZ9XSoCQFyE~1FcumXV8W_bgVPxfNzs6uQcZM8Ec61Q72UT;correlation_id=xlvzlpuwkh6syuqdfze05q7n41qle27qop4yjjvuifzapdo4npjlbi43uwbgle2m;ECOM_SESS=f2c2aihm0ocesmvx3dcs06ysh6;rCookie=0f3nn11uqq28ci5bqnveg5wme4bsr6e;lastRskxRun=1754748244881;x-xsrf-token=7ca984dc-6d35-4720-b77b-465392521d1b;__cf_bm=Szm2hZl9.PTO_DQF5DihrAOTq.dSmSrkKHsTqVenUxo-1754748237-1.0.1.1-gfLAB1wWYyHUb_scXGpXzAk6IkrkhvdNalhhsVhujY7xeFm02lwFKGUiTrBknONdwmvV3EKilTfiFORmJUDrjj3st4hoNdnrk0MT0SVed5w;OptanonConsent=isGpcEnabled=0&datestamp=Sat+Aug+09+2025+16%3A04%3A04+GMT%2B0200+(heure+d%E2%80%99%C3%A9t%C3%A9+d%E2%80%99Europe+centrale)&version=6.32.0&isIABGlobal=false&hosts=&landingPath=https%3A%2F%2Fwww.hermes.com%2Ffr%2Ffr%2Fproduct%2Fsac-p-tit-arcon-H085871CKAO%2F&groups=C0001%3A1%2CC0002%3A0%2CC0003%3A0%2CC0004%3A0;","model":"22041219PG",
|
||||
"lgs":"[fr-FR,fr,en-US,en]",
|
||||
"bchk":"3223aeb6721e0d0917e792818d193ac88dcd62fad5cad7bf7a2b2b473ecf58ee60f018dbdb1a5832e8dc6528387b0745971dbcd82387261e9a4e3f",
|
||||
"nt_tcp":0,"nt_dns":0,"nt_rd":0,"nt_irt":-29.600000008940697,"nt_rt":1129,"nt_tls":6.700000002980232,"nt_ttf":1166.7000000029802,"nt_swt":22.900000005960464,
|
||||
"nt_csd":411060,"nt_nhp":"h2","nt_rdc":0,"nt_it":"navigation","nt_prs":6.700000002980232,"nt_esc":0,"nt_ttrd":null,"nt_le":3.0999999940395355,"nt_dcle":141.79999999701977,
|
||||
"nt_di":1415.2000000029802,"nt_dc":2862.6000000089407,"ccsB":"tags.js:1252:41 at nrWrapper (sac-p-tit-arcon-H085871CKAO.html:7:13468)",
|
||||
"muev":false,"pro_t":false,"nhi":",,true,22041219PG,Android,14.0.0,128.0.6613.146,false","k_lyts":0,"k_lytk":"","serial":"fuljaueqguugf6pn"}"""
|
||||
if __name__ == '__main__':
|
||||
test_data_dict = json.loads(test_data_json)
|
||||
m_s_c = random.randint(0, 3)
|
||||
m_c_c = random.randint(3, 5) # click count
|
||||
m_m_c = random.randint(3, 5) # move count
|
||||
m_cm_r = m_c_c / m_m_c
|
||||
m_ms_r = -1 # move scroll ratio
|
||||
if m_s_c == 0:
|
||||
m_ms_r = -1
|
||||
else:
|
||||
m_ms_r = m_m_c / m_s_c
|
||||
le_js_data = JsDataLeTypePojo(glrd=test_data_dict['glrd'], glvd=test_data_dict['glvd'], hc=test_data_dict['hc'],
|
||||
ua=test_data_dict['ua'], br_oh=test_data_dict['br_oh'], br_ow=test_data_dict['br_ow'],
|
||||
ars_h=test_data_dict['ars_h'], ars_w=test_data_dict['ars_w'], pr=test_data_dict['pr'],
|
||||
@@ -65,6 +105,23 @@ if __name__ == '__main__':
|
||||
plu=test_data_dict['plu'], vnd=test_data_dict['vnd'], dvm=test_data_dict['dvm'],
|
||||
ts_mtp=test_data_dict['ts_mtp'], eva=test_data_dict['eva'],
|
||||
rs_h=test_data_dict['rs_h'],
|
||||
rs_w=test_data_dict['rs_w'], rs_cd=test_data_dict['rs_cd'], m_s_c=0, m_m_c=3, m_c_c=3,
|
||||
m_cm_r=1, m_ms_r=-1, emd=test_data_dict['emd'])
|
||||
rs_w=test_data_dict['rs_w'], rs_cd=test_data_dict['rs_cd'],
|
||||
m_s_c=m_s_c, m_m_c=m_m_c, m_c_c=m_c_c, m_cm_r=m_cm_r, m_ms_r=m_ms_r,
|
||||
emd=test_data_dict['emd'],
|
||||
bchk=test_data_dict['bchk'],
|
||||
ccsB=test_data_dict['ccsB'],
|
||||
nt_tcp=test_data_dict['nt_tcp'],
|
||||
nt_dns=test_data_dict['nt_dns'],
|
||||
nt_rd=test_data_dict['nt_rd'], nt_irt=test_data_dict['nt_irt'],
|
||||
nt_rt=test_data_dict['nt_rt'],
|
||||
nt_tls=test_data_dict['nt_tls'], nt_ttf=test_data_dict['nt_ttf'],
|
||||
nt_swt=test_data_dict['nt_swt'],
|
||||
nt_csd=test_data_dict['nt_csd'], nt_nhp=test_data_dict['nt_nhp'],
|
||||
nt_rdc=test_data_dict['nt_rdc'],
|
||||
nt_it=test_data_dict['nt_it'], nt_prs=test_data_dict['nt_prs'],
|
||||
nt_esc=test_data_dict['nt_esc'],
|
||||
nt_ttrd=test_data_dict['nt_ttrd'], nt_le=test_data_dict['nt_le'],
|
||||
nt_dcle=test_data_dict['nt_dcle'], nt_di=test_data_dict['nt_di'],
|
||||
nt_dc=test_data_dict['nt_dc'])
|
||||
print(le_js_data.to_url_encoded_json())
|
||||
print(encrpte_to_jspl(le_js_data.to_url_encoded_json()))
|
||||
|
||||
+222
-85
@@ -10,8 +10,19 @@ import jsonpickle
|
||||
@dataclass
|
||||
class JsDataPojo:
|
||||
# opts: str
|
||||
ttst: int
|
||||
ifov: bool
|
||||
r3n: int
|
||||
exp8: int
|
||||
# uid: str
|
||||
bci: bool
|
||||
bcl: float
|
||||
bct: str
|
||||
bdt: str
|
||||
dp0: bool
|
||||
ucdv: bool
|
||||
wdifrm: bool
|
||||
iwgl: str
|
||||
ttst: float
|
||||
# ifov: bool
|
||||
hc: int
|
||||
br_oh: int
|
||||
br_ow: int
|
||||
@@ -19,7 +30,12 @@ class JsDataPojo:
|
||||
wbd: bool
|
||||
tagpu: float
|
||||
wdif: bool
|
||||
wdifrm: bool
|
||||
wdifpnh: int
|
||||
lg: str
|
||||
isb: bool
|
||||
idp: bool
|
||||
crt: int
|
||||
|
||||
npmtm: bool
|
||||
br_h: int
|
||||
br_w: int
|
||||
@@ -31,7 +47,6 @@ class JsDataPojo:
|
||||
phe: bool
|
||||
nm: bool
|
||||
jsf: bool
|
||||
lg: str
|
||||
pr: int
|
||||
ars_h: int
|
||||
ars_w: int
|
||||
@@ -109,7 +124,7 @@ class JsDataPojo:
|
||||
wdw: bool
|
||||
cokys: str
|
||||
ecpc: bool
|
||||
lgs: bool
|
||||
lgs: list
|
||||
lgsod: bool
|
||||
psn: bool
|
||||
edp: bool
|
||||
@@ -136,69 +151,151 @@ class JsDataPojo:
|
||||
jset: int
|
||||
|
||||
def __init__(self, glrd, glvd, hc, br_oh, ua, br_ow, br_h, br_w, rs_h, rs_w, rs_cd, ars_h, ars_w, plg, eva, plu,
|
||||
vnd, pr, ts_mtp, dvm, emd):
|
||||
vnd, pr, ts_mtp, dvm, emd,
|
||||
ccsB,
|
||||
br_iw=513, br_ih=847, pf="Linux armv81", mob=True,
|
||||
lgs=["fr-FR", "en-US", "zh-CN", "zh", "fr", "en"],
|
||||
orf="debug",
|
||||
bchk="3223aeb6721e0d0917e7928181193ac88dcd62fad5cadfbe7a2b2b473ecf58ee70f098dbdb1a1832e8dc6528387b0745971dbcd82384261e9a4e3f",
|
||||
nt_tcp=0, nt_dns=0, nt_rd=0, nt_irt=-3.400000002235174, nt_rt=0, nt_tls=3.400000002235174,
|
||||
nt_ttf=3.099999997764826, nt_swt=3.400000002235174, nt_csd=0, nt_nhp="", nt_rdc=0, nt_it="navigation",
|
||||
nt_prs=0, nt_esc=-3.400000002235174, nt_ttrd=-2, nt_le=0, nt_dcle=0.10000000149011612,
|
||||
nt_di=74.80000000074506, nt_dc=0, ccsT="""Error
|
||||
at S (https://d.digital.hermes/tags.js:173:22)
|
||||
at Un.C (https://d.digital.hermes/tags.js:1252:41
|
||||
at nrWrapper (https://www.hermes.com/fr/fr/category/femme/Sacs%20et%20pochettes%20pour%20Femme%20_%20Herme%CC%80s%20France.html:7:13468)""",
|
||||
ccsH="1050544242",
|
||||
ccsV=",993b46baf0942a343b7e6b02fa3f8eef64727f077d3b0055af56e6994dcaf046", muev=False, prso=True,
|
||||
nhi=",64,true,Nexus 5,Android,6.0,138.0.7204.184,false", k_lyts=48,
|
||||
k_lytk="kg20va`l§'w8mh.71pdfoqcn[zy365x/\,-4bt9siu=j;r]e", tzp="Europe/Paris", isf2=False
|
||||
):
|
||||
# self.opts = "endpoint,ajaxListenerPath"
|
||||
self.ttst = (random.randint(5, 46) * 10 ** 16 + random.randint(1 * 10 ** 7, 9 * 10 ** 7)) / 10 ** 16
|
||||
self.ifov = False
|
||||
self.nddc = 1
|
||||
self.r3n = 33
|
||||
self.exp8 = 0
|
||||
self.uid = None
|
||||
self.bci = True # batteryManager.charging
|
||||
self.bcl = 0.8 # batteryManager.level
|
||||
self.bct = "Infinity" # batteryManager.chargingTime #to check
|
||||
self.bdt = "Infinity" # batteryManager.chargingTime #to check
|
||||
self.dp0 = False
|
||||
self.ucdv = False
|
||||
self.wdifrm = False
|
||||
self.iwgl = "undefined" # to check
|
||||
self.npmtm = False
|
||||
self.wdif = False
|
||||
self.wdifpnh = 2800984568
|
||||
self.lg = "fr-FR"
|
||||
self.isb = False # is brave
|
||||
self.idp = True
|
||||
self.crt = 0
|
||||
self.vnd = vnd
|
||||
self.bid = "NA"
|
||||
self.med = "defined"
|
||||
self.pltod = False
|
||||
self.csssp = ""
|
||||
self.awe = False
|
||||
self.phe = False
|
||||
self.dat = False
|
||||
self.nm = False
|
||||
self.geb = False
|
||||
self.sqt = False
|
||||
self.pf = pf
|
||||
self.hc = hc
|
||||
self.br_oh = br_oh
|
||||
self.br_ow = br_ow
|
||||
self.ua = ua
|
||||
self.wbd = False
|
||||
tag_pu = random.uniform(1, 10)
|
||||
while len(str(tag_pu)) != 17:
|
||||
tag_pu = random.uniform(1, 10)
|
||||
self.tagpu = tag_pu
|
||||
self.wdif = False
|
||||
self.wdifrm = False
|
||||
self.npmtm = False
|
||||
self.br_h = br_h
|
||||
self.ts_mtp = ts_mtp
|
||||
self.mob = mob
|
||||
self.lgs = lgs
|
||||
self.dvm = dvm
|
||||
self.hcovdr = False
|
||||
self.plovdr = False
|
||||
self.ftsovdr = False
|
||||
self.orf = orf # to check
|
||||
self.ttst = round(random.random(), 16)
|
||||
self.br_w = br_w
|
||||
self.isf = True
|
||||
self.nddc = 1
|
||||
self.rs_h = rs_h
|
||||
self.rs_w = rs_w
|
||||
self.rs_cd = rs_cd
|
||||
self.phe = False
|
||||
self.nm = False
|
||||
self.jsf = False
|
||||
self.lg = "fr-FR"
|
||||
self.pr = pr
|
||||
self.ars_h = ars_h
|
||||
self.br_h = br_h
|
||||
self.br_iw = br_iw
|
||||
self.br_ih = br_ih
|
||||
self.ars_w = ars_w
|
||||
self.tz = -120
|
||||
self.str_ss = True
|
||||
self.str_ls = True
|
||||
self.str_idb = True
|
||||
self.str_odb = True
|
||||
self.ars_h = ars_h
|
||||
self.rs_w = rs_w
|
||||
self.rs_h = rs_h
|
||||
self.rs_cd = rs_cd
|
||||
self.pr = pr
|
||||
self.so = "portrait-primary"
|
||||
self.vco = ""
|
||||
self.vcots = False
|
||||
self.vch = "probably"
|
||||
self.vchts = True
|
||||
self.vcw = "probably"
|
||||
self.vcwts = True
|
||||
self.vc3 = "maybe"
|
||||
self.vc3ts = False
|
||||
self.vcmp = ""
|
||||
self.vcmpts = False
|
||||
self.vcq = ""
|
||||
self.vcqts = False
|
||||
self.vc1 = "probably"
|
||||
self.vc1ts = True
|
||||
|
||||
self.cssS = "3.93,0.39,12.24,9.75,5.64,10.98,13.46,2.19,6.51"
|
||||
self.css0 = "7, 75, 0"
|
||||
self.css1 = "9.74354, 0.354646, -0.00922698, 0.000685511, 0.203723, -5.61673, -0.755238, 0.0561098, -0.0279023, 0.481607, -10.9534, 0.813777, -0.375565, 6.48243, -147.433, 11.9534"
|
||||
self.cssH = "15px"
|
||||
|
||||
self.plu = str.join(",", plu) if isinstance(plu, list) else plu
|
||||
self.plgod = False
|
||||
self.plg = plg
|
||||
self.plgne = "err"
|
||||
self.plgre = "err"
|
||||
self.plgof = "err"
|
||||
self.plggt = "err"
|
||||
self.pltod = False
|
||||
self.hcovdr = False
|
||||
self.hcovdr2 = False
|
||||
self.plovdr = False
|
||||
self.plovdr2 = False
|
||||
self.ftsovdr = False
|
||||
self.ftsovdr2 = False
|
||||
self.lb = False
|
||||
self.eva = eva
|
||||
self.lo = False
|
||||
self.ts_mtp = ts_mtp
|
||||
self.ts_tec = True
|
||||
self.ts_tsa = True
|
||||
self.vnd = vnd
|
||||
self.bid = "NA"
|
||||
self.plgne = "NA"
|
||||
self.plgre = "NA"
|
||||
self.plgof = "NA"
|
||||
self.plggt = "NA"
|
||||
self.mmt = "empty"
|
||||
self.plu = str.join(",", plu) if isinstance(plu, list) else plu
|
||||
self.hdn = False
|
||||
self.awe = False
|
||||
self.geb = False
|
||||
self.dat = False
|
||||
self.med = "defined"
|
||||
self.bchk = bchk
|
||||
self.nt_tcp = nt_tcp
|
||||
self.nt_dns = nt_dns
|
||||
self.nt_rd = nt_rd
|
||||
self.nt_irt = nt_irt
|
||||
self.nt_rt = nt_rt
|
||||
self.nt_tls = nt_tls
|
||||
self.nt_ttf = nt_ttf
|
||||
self.nt_swt = nt_swt
|
||||
self.nt_csd = nt_csd
|
||||
self.nt_nhp = nt_nhp
|
||||
self.nt_rdc = nt_rdc
|
||||
self.nt_it = nt_it
|
||||
self.nt_prs = nt_prs
|
||||
self.nt_esc = nt_esc
|
||||
self.nt_ttrd = nt_ttrd
|
||||
self.nt_le = nt_le
|
||||
self.nt_dcle = nt_dcle
|
||||
self.nt_di = nt_di
|
||||
self.nt_dc = nt_dc
|
||||
|
||||
self.ccsT = ccsT
|
||||
self.ccsB = ccsB
|
||||
self.ccsH = ccsH
|
||||
self.ccsV = ccsV
|
||||
self.muev = muev
|
||||
self.pro_t = True
|
||||
self.wglo = True
|
||||
self.prso = prso
|
||||
self.wbst = True
|
||||
self.psn = True
|
||||
self.edp = True
|
||||
self.addt = True
|
||||
self.wsdc = True
|
||||
self.ccsr = True
|
||||
self.nuad = True
|
||||
self.bcda = True
|
||||
self.idn = True
|
||||
self.capi = True
|
||||
self.svde = True
|
||||
self.vpbq = True
|
||||
self.mq = "aptr:coarse, ahvr:none" # to check
|
||||
self.aco = "probably"
|
||||
self.acots = False
|
||||
self.acmp = "probably"
|
||||
@@ -220,35 +317,58 @@ class JsDataPojo:
|
||||
self.acwm = "maybe"
|
||||
self.acwmts = False
|
||||
self.ocpt = False
|
||||
self.vco = ""
|
||||
self.vcots = False
|
||||
self.vch = "probably"
|
||||
self.vchts = True
|
||||
self.vcw = "probably"
|
||||
self.vcwts = True
|
||||
self.vc3 = "maybe"
|
||||
self.vc3ts = False
|
||||
self.vcmp = ""
|
||||
self.vcmpts = False
|
||||
self.vcq = ""
|
||||
self.vcqts = False
|
||||
self.vc1 = "probably"
|
||||
self.vc1ts = True
|
||||
self.dvm = dvm
|
||||
self.set_default_values()
|
||||
self.ckwa = False
|
||||
self.spwn = False
|
||||
self.emt = False
|
||||
self.bfr = False
|
||||
self.tz = -120
|
||||
self.hdn = False
|
||||
self.xt1 = False # pdfViewerEnabled
|
||||
self.cdhf = False # window.hasFocus()
|
||||
self.eva = eva
|
||||
self.cokys = ",loadTimes,csi,app"
|
||||
self.ecpc = False
|
||||
self.nhi = nhi
|
||||
self.k_lyts = k_lyts
|
||||
self.k_lytk = k_lytk
|
||||
self.emd = emd
|
||||
self.wwl = False
|
||||
self.glvd = glvd
|
||||
self.glrd = glrd
|
||||
self.wwl = False
|
||||
self.tzp = tzp
|
||||
self.isf = True
|
||||
self.isf2 = isf2
|
||||
self.dt = False
|
||||
self.fph = 416468867
|
||||
|
||||
# self.ifov = False
|
||||
# tag_pu = random.uniform(1, 10)
|
||||
# while len(str(tag_pu)) != 17:
|
||||
# tag_pu = random.uniform(1, 10)
|
||||
# self.tagpu = tag_pu
|
||||
# self.jsf = False
|
||||
# self.str_ss = True
|
||||
# self.str_ls = True
|
||||
# self.str_idb = True
|
||||
# self.str_odb = True
|
||||
#
|
||||
# # self.hcovdr2 = False
|
||||
# # self.plovdr2 = False
|
||||
# # self.ftsovdr2 = False
|
||||
# self.lb = False
|
||||
# self.lo = False
|
||||
# self.ts_tec = True
|
||||
# self.ts_tsa = True
|
||||
|
||||
# self.set_default_values()
|
||||
|
||||
self.jset = int(time.time())
|
||||
|
||||
def set_default_values(self):
|
||||
self.sqt = False
|
||||
self.so = "portrait-primary"
|
||||
self.wdw = True
|
||||
self.cokys = "bG9hZFRpbWVzY3NpL="
|
||||
self.ecpc = False
|
||||
self.lgs = True
|
||||
self.lgs = ["fr-FR", "en-US", "zh-CN", "zh", "fr", "en"]
|
||||
self.lgsod = False
|
||||
self.psn = True
|
||||
self.edp = False
|
||||
@@ -262,21 +382,28 @@ class JsDataPojo:
|
||||
self.svde = False
|
||||
self.vpbq = True
|
||||
self.ucdv = False
|
||||
self.spwn = False
|
||||
self.emt = False
|
||||
self.bfr = False
|
||||
|
||||
self.dbov = False
|
||||
self.cfpfe = "ZnVuY3Rpb24oKXt2YXIgbj10LGk9ZG9jdW1lbnRbJ1x4NzFceDc1XHg2NVx4NzJceDc5XHg1M1x4NjVceDZjXHg2NVx4NjNceDc0XHg2Zlx4NzInXShuKDQ2MSkpO2lmKGkpeyFmdW5jdGlvbiB0KCl7dHJ5e3ZhciBuPWlbJ1x4NzNceDY4XHg2MVx4NjRceDZmXHg3" # 4.40.0
|
||||
self.stcfp = "Ly9kLmRpZ2l0YWwuaGVybWVzL3RhZ3MuanM6Mjo4ODYzNSkKICAgIGF0IHQuZXhwb3J0cy5kZF9hZCAoaHR0cHM6Ly9kLmRpZ2l0YWwuaGVybWVzL3RhZ3MuanM6MjoxMDc3OTYpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjYzNzkw" # 4.40.0
|
||||
self.ckwa = True
|
||||
|
||||
def to_url_encoded_json(self):
|
||||
js_str = jsonpickle.encode(self, unpicklable=False).replace(": ", ":").replace(", ", ",")
|
||||
_safe_string = urllib.parse.quote(js_str)
|
||||
return _safe_string
|
||||
# _safe_string = urllib.parse.quote(js_str)
|
||||
return js_str
|
||||
|
||||
|
||||
test_data_json = """{"glvd":"ARM","glrd":"Mali-G57 MC2","hc":5,"br_oh":620,"br_ow":360,"br_h":620,"br_w":360,"rs_h":804,"rs_w":360,"rs_cd":24,"ars_h":804,"ars_w":360,"plg":2,"eva":33,"vnd":"Google Inc.","plu":["eTJjZUp","iZMOHLs1"],"ua":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36","dvm":4,"acw":"probably","pr":3,"ts_mtp":5,"tz":-120,"emd":"k:ai,vi,ao,vi d:defau,8f9de,defau,24476 g:4e652,f9991,defau,d5801","cookiesStr":"app.sig=_FqS3_SPN2D40Z4Qlq-_ybxzRvQ;datadome=VSGCNMYkY6L81typRJUpurlyd39dHxdfxIYc6DzRWDT7_rtZ8UodGcbow1okQR2zg_t4d_NcP0rC1ZHNz3XSDAGFZCJhFI49lai~x2Nb2unkhOlY8o4E04Wjmde~auDZ;app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiLW9jbktLVXAzMjVTOEFEdFpLUU9kSXlMIn0=;policy=accepted;lang=fr;"}"""
|
||||
test_data_json = """{"glvd":"Google Inc. (ARM)","glrd":"ANGLE (ARM, Mali-G57 MC2, OpenGL ES 3.2)","hc":8,"br_oh":745,"br_ow":393,
|
||||
"br_h":745,"br_w":393,"rs_h":876,"rs_w":393,"rs_cd":24,"ars_h":876,"ars_w":393,"plg":0,"eva":33,
|
||||
"vnd":"Google Inc.","plu":[],"ua":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36","dvm":4,"acw":"probably",
|
||||
"pr":2.75,"ts_mtp":5,"tz":-120,"emd":"k:ai,vi,ao",
|
||||
"cookiesStr":"rskxRunCookie=0;datadome=GIfiRxEgyr5dwsnV0NoR9WPO3oA0CkMVLsqdvZLmuxHi81JFRbG7LaWKiAkSQRJTBkv3qBkGlCOC3uR00yZ9XSoCQFyE~1FcumXV8W_bgVPxfNzs6uQcZM8Ec61Q72UT;correlation_id=xlvzlpuwkh6syuqdfze05q7n41qle27qop4yjjvuifzapdo4npjlbi43uwbgle2m;ECOM_SESS=f2c2aihm0ocesmvx3dcs06ysh6;rCookie=0f3nn11uqq28ci5bqnveg5wme4bsr6e;lastRskxRun=1754748244881;x-xsrf-token=7ca984dc-6d35-4720-b77b-465392521d1b;__cf_bm=Szm2hZl9.PTO_DQF5DihrAOTq.dSmSrkKHsTqVenUxo-1754748237-1.0.1.1-gfLAB1wWYyHUb_scXGpXzAk6IkrkhvdNalhhsVhujY7xeFm02lwFKGUiTrBknONdwmvV3EKilTfiFORmJUDrjj3st4hoNdnrk0MT0SVed5w;OptanonConsent=isGpcEnabled=0&datestamp=Sat+Aug+09+2025+16%3A04%3A04+GMT%2B0200+(heure+d%E2%80%99%C3%A9t%C3%A9+d%E2%80%99Europe+centrale)&version=6.32.0&isIABGlobal=false&hosts=&landingPath=https%3A%2F%2Fwww.hermes.com%2Ffr%2Ffr%2Fproduct%2Fsac-p-tit-arcon-H085871CKAO%2F&groups=C0001%3A1%2CC0002%3A0%2CC0003%3A0%2CC0004%3A0;","model":"22041219PG",
|
||||
"lgs":"[fr-FR,fr,en-US,en]",
|
||||
"bchk":"3223aeb6721e0d0917e792818d193ac88dcd62fad5cad7bf7a2b2b473ecf58ee60f018dbdb1a5832e8dc6528387b0745971dbcd82387261e9a4e3f",
|
||||
"nt_tcp":0,"nt_dns":0,"nt_rd":0,"nt_irt":-29.600000008940697,"nt_rt":1129,"nt_tls":6.700000002980232,"nt_ttf":1166.7000000029802,"nt_swt":22.900000005960464,
|
||||
"nt_csd":411060,"nt_nhp":"h2","nt_rdc":0,"nt_it":"navigation","nt_prs":6.700000002980232,"nt_esc":0,"nt_ttrd":null,"nt_le":3.0999999940395355,"nt_dcle":141.79999999701977,
|
||||
"nt_di":1415.2000000029802,"nt_dc":2862.6000000089407,"ccsB":"tags.js:1252:41 at nrWrapper (sac-p-tit-arcon-H085871CKAO.html:7:13468)",
|
||||
"muev":false,"pro_t":false,"nhi":",,true,22041219PG,Android,14.0.0,128.0.6613.146,false","k_lyts":0,"k_lytk":"","serial":"fuljaueqguugf6pn"}"""
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_data_dict = json.loads(test_data_json)
|
||||
@@ -286,7 +413,17 @@ if __name__ == '__main__':
|
||||
plg=test_data_dict['plg'], br_h=test_data_dict['br_h'], br_w=test_data_dict['br_w'],
|
||||
plu=test_data_dict['plu'], vnd=test_data_dict['vnd'], dvm=test_data_dict['dvm'],
|
||||
ts_mtp=test_data_dict['ts_mtp'], eva=test_data_dict['eva'], rs_h=test_data_dict['rs_h'],
|
||||
rs_w=test_data_dict['rs_w'], rs_cd=test_data_dict['rs_cd'], emd=test_data_dict['emd'])
|
||||
rs_w=test_data_dict['rs_w'], rs_cd=test_data_dict['rs_cd'], emd=test_data_dict['emd'],
|
||||
bchk=test_data_dict['bchk'],
|
||||
ccsB=test_data_dict['ccsB'],
|
||||
nt_tcp=test_data_dict['nt_tcp'],
|
||||
nt_dns=test_data_dict['nt_dns'],
|
||||
nt_rd=test_data_dict['nt_rd'], nt_irt=test_data_dict['nt_irt'], nt_rt=test_data_dict['nt_rt'],
|
||||
nt_tls=test_data_dict['nt_tls'], nt_ttf=test_data_dict['nt_ttf'], nt_swt=test_data_dict['nt_swt'],
|
||||
nt_csd=test_data_dict['nt_csd'], nt_nhp=test_data_dict['nt_nhp'], nt_rdc=test_data_dict['nt_rdc'],
|
||||
nt_it=test_data_dict['nt_it'], nt_prs=test_data_dict['nt_prs'], nt_esc=test_data_dict['nt_esc'],
|
||||
nt_ttrd=test_data_dict['nt_ttrd'], nt_le=test_data_dict['nt_le'],
|
||||
nt_dcle=test_data_dict['nt_dcle'], nt_di=test_data_dict['nt_di'], nt_dc=test_data_dict['nt_dc'] )
|
||||
print(js.to_url_encoded_json())
|
||||
# text_file = open("jsdata.txt", "w")
|
||||
# # write string to file
|
||||
|
||||
@@ -131,9 +131,18 @@ class AppointmentRequestSender(threading.Thread):
|
||||
ars_h=_received_dict['ars_h'], ars_w=_received_dict['ars_w'], pr=_received_dict['pr'],
|
||||
plg=_received_dict['plg'], br_h=_received_dict['br_h'], br_w=_received_dict['br_w'],
|
||||
plu=_received_dict['plu'], vnd=_received_dict['vnd'], dvm=_received_dict['dvm'],
|
||||
ts_mtp=_received_dict['ts_mtp'], eva=_received_dict['eva'],
|
||||
rs_h=_received_dict['rs_h'],
|
||||
rs_w=_received_dict['rs_w'], rs_cd=_received_dict['rs_cd'], emd=_received_dict['emd'])
|
||||
ts_mtp=_received_dict['ts_mtp'], eva=_received_dict['eva'], rs_h=_received_dict['rs_h'],
|
||||
rs_w=_received_dict['rs_w'], rs_cd=_received_dict['rs_cd'], emd=_received_dict['emd'],
|
||||
bchk=_received_dict['bchk'],
|
||||
ccsB=_received_dict['ccsB'],
|
||||
nt_tcp=_received_dict['nt_tcp'],
|
||||
nt_dns=_received_dict['nt_dns'],
|
||||
nt_rd=_received_dict['nt_rd'], nt_irt=_received_dict['nt_irt'], nt_rt=_received_dict['nt_rt'],
|
||||
nt_tls=_received_dict['nt_tls'], nt_ttf=_received_dict['nt_ttf'], nt_swt=_received_dict['nt_swt'],
|
||||
nt_csd=_received_dict['nt_csd'], nt_nhp=_received_dict['nt_nhp'], nt_rdc=_received_dict['nt_rdc'],
|
||||
nt_it=_received_dict['nt_it'], nt_prs=_received_dict['nt_prs'], nt_esc=_received_dict['nt_esc'],
|
||||
nt_ttrd=_received_dict['nt_ttrd'], nt_le=_received_dict['nt_le'],
|
||||
nt_dcle=_received_dict['nt_dcle'], nt_di=_received_dict['nt_di'], nt_dc=_received_dict['nt_dc'] )
|
||||
_received_cookies = _received_dict["cookiesStr"]
|
||||
# remove already sent contacts
|
||||
self.contact_list = filter_contacts(self.contact_list, self.already_tried_contact_list)
|
||||
@@ -178,21 +187,25 @@ class AppointmentRequestSender(threading.Thread):
|
||||
else:
|
||||
m_ms_r = m_m_c / m_s_c
|
||||
|
||||
js_le_data = JsDataLeTypePojo(glrd=_received_dict['glrd'], glvd=_received_dict['glvd'],
|
||||
hc=_received_dict['hc'],
|
||||
ua=_received_dict['ua'], br_oh=_received_dict['br_oh'],
|
||||
br_ow=_received_dict['br_ow'],
|
||||
ars_h=_received_dict['ars_h'], ars_w=_received_dict['ars_w'],
|
||||
pr=_received_dict['pr'],
|
||||
plg=_received_dict['plg'], br_h=_received_dict['br_h'],
|
||||
br_w=_received_dict['br_w'],
|
||||
plu=_received_dict['plu'], vnd=_received_dict['vnd'],
|
||||
dvm=_received_dict['dvm'],
|
||||
ts_mtp=_received_dict['ts_mtp'], eva=_received_dict['eva'],
|
||||
rs_h=_received_dict['rs_h'],
|
||||
rs_w=_received_dict['rs_w'], rs_cd=_received_dict['rs_cd'],
|
||||
js_le_data = JsDataLeTypePojo(glrd=_received_dict['glrd'], glvd=_received_dict['glvd'], hc=_received_dict['hc'],
|
||||
ua=_received_dict['ua'], br_oh=_received_dict['br_oh'], br_ow=_received_dict['br_ow'],
|
||||
ars_h=_received_dict['ars_h'], ars_w=_received_dict['ars_w'], pr=_received_dict['pr'],
|
||||
plg=_received_dict['plg'], br_h=_received_dict['br_h'], br_w=_received_dict['br_w'],
|
||||
plu=_received_dict['plu'], vnd=_received_dict['vnd'], dvm=_received_dict['dvm'],
|
||||
ts_mtp=_received_dict['ts_mtp'], eva=_received_dict['eva'], rs_h=_received_dict['rs_h'],
|
||||
rs_w=_received_dict['rs_w'], rs_cd=_received_dict['rs_cd'], emd=_received_dict['emd'],
|
||||
bchk=_received_dict['bchk'],
|
||||
ccsB=_received_dict['ccsB'],
|
||||
nt_tcp=_received_dict['nt_tcp'],
|
||||
nt_dns=_received_dict['nt_dns'],
|
||||
nt_rd=_received_dict['nt_rd'], nt_irt=_received_dict['nt_irt'], nt_rt=_received_dict['nt_rt'],
|
||||
nt_tls=_received_dict['nt_tls'], nt_ttf=_received_dict['nt_ttf'], nt_swt=_received_dict['nt_swt'],
|
||||
nt_csd=_received_dict['nt_csd'], nt_nhp=_received_dict['nt_nhp'], nt_rdc=_received_dict['nt_rdc'],
|
||||
nt_it=_received_dict['nt_it'], nt_prs=_received_dict['nt_prs'], nt_esc=_received_dict['nt_esc'],
|
||||
nt_ttrd=_received_dict['nt_ttrd'], nt_le=_received_dict['nt_le'],
|
||||
nt_dcle=_received_dict['nt_dcle'], nt_di=_received_dict['nt_di'], nt_dc=_received_dict['nt_dc'],
|
||||
m_s_c=m_s_c, m_m_c=m_m_c, m_c_c=m_c_c,
|
||||
m_cm_r=m_cm_r, m_ms_r=m_ms_r, emd=_received_dict['emd'])
|
||||
m_cm_r=m_cm_r, m_ms_r=m_ms_r)
|
||||
time.sleep(random.randint(1, 4))
|
||||
_new_le_cookies = captchaResultGetter.get_le_valid_cookie(proxy_to_use=_proxy_to_use,
|
||||
js_le_type_data=js_le_data,
|
||||
|
||||
@@ -4,6 +4,8 @@ import re
|
||||
from typing import Union
|
||||
# import requests
|
||||
from curl_cffi import requests
|
||||
|
||||
from captcha.jspl_encoder_wrapper import encrpte_to_jspl
|
||||
from models.jsdata_le_pojo import JsDataLeTypePojo
|
||||
from models.jsdata_pojo import JsDataPojo
|
||||
from models.result_pojo import RequestResult
|
||||
@@ -104,9 +106,10 @@ class CaptchaResultGetter:
|
||||
return None
|
||||
|
||||
def get_ch_raw_data_from_js_data(self, js_data: JsDataPojo, old_valid_cookie) -> str:
|
||||
_tag_version = "4.35.0"
|
||||
_raw_data = "jsData={}&eventCounters=%5B%5D&jsType=ch&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv={}".format(
|
||||
js_data.to_url_encoded_json(), old_valid_cookie, _tag_version)
|
||||
_tag_version = "5.1.5"
|
||||
_jspl = encrpte_to_jspl(js_data.to_url_encoded_json())
|
||||
_raw_data = "jspl={}&eventCounters=%5B%5D&jsType=ch&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv={}".format(
|
||||
_jspl, old_valid_cookie, _tag_version)
|
||||
print("raw ch data is " + _raw_data)
|
||||
return _raw_data
|
||||
|
||||
@@ -173,8 +176,9 @@ class CaptchaResultGetter:
|
||||
# _le_js_raw_data = self.get_le_raw_data_from_js_data(js_le_type_data=js_le_type_data,
|
||||
# old_valid_cookie=old_valid_cookie)
|
||||
_cid = get_datadome_cookies(old_valid_cookie)
|
||||
_raw_data = "jsData={}&eventCounters=%7B%22mousemove%22%3A{}%2C%22click%22%3A{}%2C%22scroll%22%3A{}%2C%22touchstart%22%3A{}%2C%22touchend%22%3A{}%2C%22touchmove%22%3A{}%2C%22keydown%22%3A{}%2C%22keyup%22%3A{}%7D&jsType=le&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=4.35.0".format(
|
||||
js_le_type_data.to_url_encoded_json(), mousemove_count, click_count, scroll_count, touch_count, touch_count,
|
||||
_jspl = encrpte_to_jspl(js_le_type_data.to_url_encoded_json())
|
||||
_raw_data = "jsData={}&eventCounters=%7B%22mousemove%22%3A{}%2C%22click%22%3A{}%2C%22scroll%22%3A{}%2C%22touchstart%22%3A{}%2C%22touchend%22%3A{}%2C%22touchmove%22%3A{}%2C%22keydown%22%3A{}%2C%22keyup%22%3A{}%7D&jsType=le&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=5.1.5".format(
|
||||
_jspl, mousemove_count, click_count, scroll_count, touch_count, touch_count,
|
||||
touch_move,
|
||||
key_count,
|
||||
key_count, _cid)
|
||||
|
||||
Reference in New Issue
Block a user