av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

用Python模擬網(wǎng)站中對(duì)JavaScript加密需要的兩種方法

如果你在做網(wǎng)絡(luò)爬蟲時(shí),你是否覺得自己的“蟲”不如別人的?如果你想了解別人的網(wǎng)絡(luò)爬蟲到底是怎樣運(yùn)行以及如何對(duì)其進(jìn)行加密,下面的文章就是介紹如何在python中模擬相關(guān)網(wǎng)站的JavaScript加密的實(shí)際步驟等相關(guān)內(nèi)容的介紹。

成都創(chuàng)新互聯(lián)公司從2013年成立,先為攀枝花等服務(wù)建站,攀枝花等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為攀枝花企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在做網(wǎng)絡(luò)爬蟲中很多人都會(huì)遇到,做得比較好的一些企業(yè)級(jí)網(wǎng)站,對(duì)于登陸或者其他操作都會(huì)對(duì)用戶的輸入做一些加密處理后再post到服務(wù)器上去,而加密這部分幾乎都是通過JavaScript來完成的,所以要做爬蟲,需要模擬 這些加密的處理。

我比較喜歡Python來做爬蟲,urllib/urllib2庫用起來真的是很方便,所以很多時(shí)候遇到需要在python中來模擬網(wǎng)站的JavaScript加密過程。暫時(shí)總結(jié)起來有兩種方法:

***種是改寫JavaScript的代碼

這沒什么好說的,不過只適用于比較小而且不復(fù)雜的JavaScript代碼片段。比如人人網(wǎng)上發(fā)站內(nèi)信的頁面有這樣的一個(gè)隱藏post數(shù)據(jù):

 
 
 

在頁面上biz的值為0,但是post的時(shí)候就會(huì)變成類似于941_683291223928232的字串,仔細(xì)看一下頁面的源代碼,就會(huì)發(fā)現(xiàn)這段驗(yàn)證的加密字串是通過一段JavaScript的代碼生成的:

 
 
 
  1.  

這其實(shí)類似一段小型的驗(yàn)證加密,它先隨機(jī)生產(chǎn)一段字串,復(fù)制給隨機(jī)產(chǎn)生的一個(gè)變量名,再隨機(jī)生成一段運(yùn)算符,復(fù)制給另一個(gè)隨機(jī)生成的變量名,然后對(duì)這兩個(gè)變量進(jìn)行一系列操作和運(yùn)算,生成一個(gè)類似于941_683291223928232的字串。每次刷新頁面這段代碼中產(chǎn)生的字串和變量名都是不一樣的,但是仔細(xì)研究這段代碼,算法都是相同的,只要得到字串和運(yùn)算符串,就可以生成這串驗(yàn)證密鑰了。

所以將這段代碼簡(jiǎn)單的改寫成python代碼,問題得到解決,在python模擬網(wǎng)站的JavaScript加密過程下面代碼中code就是提取出來的上述JavaScript代碼中的mREOQQ,operator代表VKMHX,而xn則代表ab的初始值,***得到的xn_biz就是我們最終需要的驗(yàn)證密鑰了。

 
 
 
  1. def __genBizCode(code, operator, xn):
  2. rXHU = unicode( code )
  3. yAMKEN = operator
  4. VCHEN, yEEJ, eLKKIH = (0, 0, ”); 
  5. KFNQH = int( len(yAMKEN)/2 );
  6. while VCHEN < len(rXHU):
  7. yEEJ = ord(rXHU[VCHEN])
  8. VCHEN += 1
  9. index = yEEJ % len(yAMKEN)
  10. dDWE = ord( yAMKEN[index] )
  11. dDWE = chr(dDWE)
  12. if dDWE==’L':
  13. dDWE = ‘<<’
  14. if dDWE==’~':
  15. eLKKIH += str( ~yEEJ*(-1) )
  16. else:
  17. reg = ‘%d%s%d’ % ( yEEJ, dDWE, KFNQH)
  18. eLKKIH += str( int( eval(reg) ) )
  19. xnxn_biz = xn + ‘_’
  20. xn_biz += eLKKIH
  21. return xn_biz 

這種方法沒有依賴性,但是使用的范圍較窄,一是要求算法簡(jiǎn)單才能改寫,二是要求算法固定,如果每次刷新頁面算法都不一樣,這種方法就不使用了。下面會(huì)談到一種通用性的方法。

第二種是在python中運(yùn)行js代碼由于QZone和QQ校友登陸的時(shí)候,post的密碼都進(jìn)行了加密,搜索了一下,發(fā)現(xiàn)很多人都研究過這個(gè)東東。騰訊將用戶的密碼和驗(yàn)證碼一起,通過一些js代碼進(jìn)行加密,生成一個(gè)32為的密鑰最終post到服務(wù)器上。

對(duì)于這個(gè)加密算法,網(wǎng)上大部分流傳的說法是,先將用戶密碼進(jìn)行3次md5的加密,轉(zhuǎn)成大寫的32位字符串,再將驗(yàn)證轉(zhuǎn)換成大寫,與前面的32位md5大寫字符串相加,得到一個(gè)36位的字符串,***對(duì)這個(gè)36位的字串進(jìn)行md5加密并轉(zhuǎn)換成大寫字串,得到最終post的密鑰。

網(wǎng)上很多人說用標(biāo)準(zhǔn)的md5加密,但是我用python的hashlib里的md5進(jìn)行上述的加密,得到的結(jié)果卻與標(biāo)準(zhǔn)結(jié)果不同,于是只能尋求其他辦法。后來在Google的時(shí)候搜到了在python中利用windows的插件Windows ScriptControl運(yùn)行其他腳本語言的方法,不僅適用js,還可以運(yùn)行vbs等。

首先需要安裝Windows ScriptControl插件,可以去微軟的官網(wǎng)上下載。其次還需要安裝python的win32庫,然后就可以簡(jiǎn)單的如下執(zhí)行:

 
 
 
  1. import win32com.client
  2. def readJsFile(filename):
  3. fp = file( filename, ‘r’ )
  4. lines = ”
  5. for line in fp:
  6. lines += line
  7. return lines
  8. def driveJsCode(code, func, paras=None):
  9. js = win32com.client.Dispatch
    (’MSScriptControl.ScriptControl’)
  10. js.Language = ‘JavaScript’
  11. js.AllowUI = False
  12. js.AddCode( code )
  13. if paras:
  14. return js.Run(func, paras[0], paras[1])
  15. else:
  16. return js.Run(func)
  17. if __name__ == ‘__main__’:
  18. code = readJsFile( ‘comm.js’ )
  19. p = driveJsCode
    ( code, ‘myPreProcess’, [password, verfcode] )
  20. print ‘The decoded code is %s’ % p 

這種方法通用性強(qiáng),而且即使服務(wù)器改變算法,依然可以得到正確的加密驗(yàn)證碼。以上的相關(guān)內(nèi)容就是對(duì)Python模擬網(wǎng)頁的javascript加密驗(yàn)證處理的相關(guān)內(nèi)容的介紹。


分享文章:用Python模擬網(wǎng)站中對(duì)JavaScript加密需要的兩種方法
轉(zhuǎn)載注明:http://uogjgqi.cn/article/cdjocji.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流