目标网站:
https://www.icgoo.net/search/?partno=AD620&qty=1&tdsourcetag=s_pcqq_aiomsg
要获取这个网页的信息。先来分析网页机构:
所需要的信息在:
拿出编译器,requests.get()发现没有这个信息。
怎么办?
打开fiddler,进行抓包。找到信息所在的请求。
发现类似的请求,特别多,而且所有的信息,全是这么一个框,怎么办?
点一下框上面的黄色框,也就是
进行解码,发现所有的信息全在这些请求中。
那么找出来着写请求,不就可以获取信息了?
任务又回到了原点,找请求。
从fiddler中,我们观察到所有的请求都是这个模样的:
GET /search/getdata/?sup=element14_sh&partno=AD620&qty=1&[email protected]aTEyMzBmMzhlNT[email protected]sdfgQ=hmo28jc37qkelp1hjc0emewh HTTP/1.1
这个sup是什么鬼?token哪来的?
继续分析。
从我最开始的requests.get()中找到了这样一句url生成的方式。那么我们是不是只要找到sups[i],partno,qty,token就可以了
继续寻找。
token是由getToken生成的,目标转换,找getToken,
到了这里,我们的token就找完了。
模拟js执行,生成token,然后进行url的拼接就行了。
js代码:
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "=";
function getToken(chr0, q) {
var output = "";
var chr1, chr2, chr3, chr4 = "";
var enc1, enc2, enc3, enc4 = "";
var ecc5 = q.substr(8, 3);
var i = 0;
q = q.substring(0, 8) + q.substr(11);
chr1 = q;
chr2 = chr0;
chr3 = chr2 / 100 << 2 + "sdfde";
chr0 = "wcqsdfg" + (chr1 + "pqskfg");
chr0 = "pqs?kfg" + chr0.substring(0, 11) + chr1.substring(18, chr1.length) + chr0.substring(0, 8) + chr1.substring(0, 18) + "[email protected]";
chr4 = "=hmo28jc37qk" + lq(chr2);
do {
chr1 = chr2.charCodeAt(i++);
chr3 = chr2.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
if (isNaN(chr2)) {
enc3 = enc4 = 64
} else {
if (isNaN(chr3)) {
enc4 = 64
}
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
output = keyStr.charAt(enc2) + keyStr.charAt(enc1) + keyStr.charAt(chr0) + chr0 + keyStr.charAt(enc2) + chr4;
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = ""
} while ( i < chr3 . length );
output = output.substr(0, 8) + ecc5 + output.substr(8);
return output
}
function lq(str) {
var chr1, chr2, chr3, chr4 = "";
var enc1, enc2, enc3, enc4 = "";
chr1 = "p1";
chr2 = "c0";
chr3 = "hj";
chr4 = "wh";
enc1 = str.substring(0, 2);
enc1 = enc1 + chr1;
enc2 = str.substring(3, 2);
enc2 = chr3 + chr2;
enc3 = str.substring(5, 2);
enc3 = enc1 + enc2 + enc3 + chr4;
return enc3
};
执行代码:
supps = 'mouser,digikey,rochester,element14,hot,chip1stop,oem,future,element14_sh,online,arrow,verical,heilind,rs_china,rs_hk,avnet,questcomp,other,peigenesis,rutronik,tme,allied,corestaff,overstock,peigenesis_cn,excess,arrow_special,distrelec,rs_pro,microchip,icgoo_must_buy_parts,buerklin,epc,runic'
supp_list = supps.split(',')
token_list = []
for i in range(len(supp_list)):
_JS = execjs.compile(open("./test.js", "r").read()) # 初始化JS
token = _JS.call("getToken", supp_list[i], token_)
token_list.append(token)
print(token_list)
最后进行url拼接,拿回数据就行啦。