1. url:https://ac.scmor.com/
2. target:如下鏈接
3. 過程分析:
3.1 打開chrome調試,進行元素分析。隨便定位一個“現在訪問”
3.2 鏈接不是直接掛在源碼里,而是調用一個名為“visit”的js函數。下一步去找這個函數。
3.3 對資源全局搜索,找到visit函數:
3.4 看到它還調用了一個strdecode函數,再去找:
3.5 看到它還調用了一個base64decode函數,接着找:
上面的變量也是需要的。
3.6 接下來,把所有用到的js代碼放到一個js文件中去,稍微重構一下js代碼。
js代碼如下:
//var url = strdecode(url); var Gword = "author: link@scmor.com."; var hn = 'ac.scmor.com' function strdecode(string) { string = base64decode(string); key = Gword + hn; len = key.length; code = ''; for (i = 0; i < string.length; i++) { var k = i % len; code += String.fromCharCode(string.charCodeAt(i) ^ key.charCodeAt(k)); } return base64decode(code); } function base64decode(str) { var c1, c2, c3, c4; var i, len, out; len = str.length; i = 0; out = ""; while (i < len) { do { c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c1 == -1);if (c1 == -1) break; do { c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c2 == -1);if (c2 == -1) break; out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); do { c3 = str.charCodeAt(i++) & 0xff; if (c3 == 61) return out; c3 = base64DecodeChars[c3]; } while (i < len && c3 == -1);if (c3 == -1) break; out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); do { c4 = str.charCodeAt(i++) & 0xff; if (c4 == 61) return out; c4 = base64DecodeChars[c4]; } while (i < len && c4 == -1);if (c4 == -1) break; out += String.fromCharCode(((c3 & 0x03) << 6) | c4); } return out; } var base64DecodeChars = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
其中有兩個變量需要在網頁源碼中去尋找,Gword和hn,找到之后在js代碼中定義變量即可,如上。
3.7 下面用execjs執行js,通過js獲取“現在訪問”的鏈接。完整代碼如下:
import execjs def getJs(): jsStr = '' with open('jsCode.js', 'r') as f: s = f.readline() while s: jsStr += s s = f.readline() # print(jsStr) return jsStr if __name__ == '__main__': jsStr = getJs() ctx = execjs.compile(jsStr) visitParam = 'AD0mWAw6dxYgEFdYJEAAGCA2bFcLOngbAmYmFjRdS1ovGFBc' url = ctx.call('strdecode', visitParam) print(url)
作為一個爬蟲工作者,我的js真的是弱爆了。