면책 조항 :이 기사는 연구 및 연구용이며 불법적 인 용도로 사용하는 것은 금지되어 있습니다. 그렇지 않으면 귀하의 책임입니다. 침해 사항이있는 경우 통지하고 삭제하십시오. 감사합니다!
문제 설명:
Juchao 웹 페이지 에서 데이터 수집 크롤러 에 대해 인터넷을 검색 했는데 제가 작성한 내용과 다른 것 같습니다. 아마주의 깊게 읽지 않았을 것입니다. 금융 데이터 및 기타 정보를 가져 왔기 때문일 것입니다.하지만 그는 헤더에 암호화 된 매개 변수 mcode를 요청했습니다. 말할 것도없이 코드를 직접 엽니 다.
해결책:
1. 요청을 잡으십시오. 여기에 4 개의 주요 매개 변수가 있습니다. 약.
2. 그런 다음 mcode를 직접 검색합니다. 일반적으로 첫 번째 링크를 직접 클릭하고 형식을 지정하고 mcode를 검색합니다. mcode가 indexcode.getResCode () 메서드에 의해 생성 된 것을 볼 수 있으므로이 메서드의 항목 만 찾으면됩니다. mcode 생성 방법을 찾을 수 있습니다.
3.이 방법이 있는지 확인하기위한 콘솔 출력 (true)을 계속 클릭합니다.
4. window.JSonToCSV.missjson 메소드가 사용되고 타임 스탬프가 전달되었음을 알 수 있습니다.
5.이 함수를 빼고 다시 작성해 봅시다.
function get_mcode(input) {
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
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);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
};
6. 암호화 된 매개 변수는 pyexecjs 실행 후 얻을 수 있으며 소스 코드도 게시됩니다.
# -*- coding: utf-8 -*-
import time
import execjs
def get_mcode():
js_str = '''
function mcode(input){
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
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);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output
}
'''
input = str(int(time.time()))
js = execjs.compile(js_str) # 编译执行js代码
jschl_answer = js.call('mcode', input) # 调用函数
return jschl_answer