When I navigate to this site, input chassis number JTDJC123705048557
right next to Numéro de chassis
and hit Consultation
button, I get the required result which is displayed at the bottom of that page.
I'm trying to create a script using requests module to mimic the process I've detailed above. The script I've already created can produce the result accordingly only when I hardcode the value of PAGEDATA
.
The value of PAGEDATA
is the chassis number (decoded or something). The thing is when I use this chassis number JTDJC123705048557
in the inputbox, the value of PAGEDATA
within params becomes 5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E
in dev tools.
This is how I got success (using hardcoded value of pagedata from dev tools):
import re
import requests
link = 'https://www.mobilit.fgov.be/WebdivPub_FR/wmvpstv1_fr.jsp'
headers = {
'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',
}
params = {
'SUBSESSIONID': '',
'DYNAMIC': 'DOREQUEST',
'NAME': 'CMV_WD_PBL01_CONSULT_STATUS',
'PSTEPID': '',
'WINDOWID': '',
'PAGEDATA': '5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E'
}
with requests.Session() as s:
s.headers.update(headers)
res = s.get(link)
session_id = res.url.split("=")[1]
params['SUBSESSIONID'] = session_id
params['PSTEPID'] = re.findall(r"pStepId=(.*?);",res.text)[0]
params['WINDOWID'] = re.findall(r"windowId=(.*?);",res.text)[0]
resp = s.get(link,params=params)
print(resp.text)
Question: how can I convert this chassis number
JTDJC123705048557
to the value of aforementioned pagedata?
CodePudding user response:
First to note: the code found on the page is one of the worst I've ever seen before (lot's of global variables, unnecessary calls, generally hand-written spaghetti code).
For the task of computing PAGEDATA
I use js2py
module with snippet I got from the page Javascript (for pure Python version scroll down):
import js2py
js_hexify = """\
var hexTable= new Array("00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F","10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F","20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F","30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F","40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F","50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F","60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F","70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F","80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F","90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF","D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF","E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF","F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF");
var mB = false;
function hexify(p) {
var h = new Array(p.length<<1);
var c = ' ';
var b = 0;
for (i = 0; i < p.length; i ) {
c = p.charCodeAt(i);
if ( c > 255 ) {
if ( !mB ) {
h.push('u');
mB = true;
}
b = c >> 8;
// hexStr.push(DecToHex(hiByte));
h.push(hexTable[b]);
c = c & 255;
// hexStr.push(DecToHex(ch));
h.push(hexTable[c]);
} else {
if ( mB ) {
h.push('u');
mB = false;
}
// hexStr.push(DecToHex(ch));
h.push(hexTable[c]);
}
}
return h.join("")
}"""
context = js2py.EvalJs()
context.execute(js_hexify)
magic_string = "RC142 on Click~RC126 ~RC130 ~RC134 {}~" # <-- this string is always the same, only the last part changes
id_ = "JTDJC123705048557"
print(context.hexify(magic_string.format(id_))) # <-- this computes the PAGEDATA parameter
Prints:
5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E
Pure Python version:
magic_string = "RC142 on Click~RC126 ~RC130 ~RC134 {}~"
id_ = "JTDJC123705048557"
x = "".join((hex(ord(ch))[2:].upper() for ch in magic_string.format(id_)))
print(x)