日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

都說術業有專攻,每個語言也都有自己的長處和短處。在爬蟲方向,Python絕對是扛把子,近幾年隨著AI的火爆,需要各種各樣的數據,所以,爬蟲需求也跟著水漲船高起來。

我們做爬蟲的當然是爬的爽,但是估計人家后臺在罵街,畢竟誰都不希望自己的數據被弄走,所以后臺反爬技術也在快速提升,一攻一防就這么在拉鋸著。

現在為了防止反爬,前端使用的反爬技術比較多的是js代碼混淆。

什么是js代碼混淆?

正常代碼

我們現在看一段js代碼,代碼邏輯很簡單,就是拼接時間返回。

function formatDate(now) { 
    var now = new Date(1230999938); 
    var year=now.getFullYear(); 
    var month=now.getMonth()+1; 
    var date=now.getDate(); 
    var hour=now.getHours(); 
    var minute=now.getMinutes(); 
    var second=now.getSeconds(); 
    return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; 
} 

運行一下這段代碼,如下圖所示。

手把手教你如何使用Python執行js代碼

 

混淆代碼

我隨便找了個在線的js代碼混淆網站。

js代碼

function formatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"](1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();var JfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var $mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();return tsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+" "+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8 

上面這個真的不是我瞎寫的,混淆之后就是這樣子的,不信看圖片。

手把手教你如何使用Python執行js代碼

 

可能我們會有個疑問,js代碼都成這玩意了,還能執行嗎? 答案是肯定的。即使js代碼非常亂,但還是可以執行的,結果跟上面的是一樣的。

這就造成了一個問題,我們在做爬蟲時,如果需要,多多少少可能都要研究一下js代碼,然后進行js解密一下,但是,但是,要是代碼都混淆成了這了,還怎么解?

一點邏輯都看不通了,基本上不可用Python按照js邏輯重寫出來了...

很巧,小編也是卡在這里...后來我就想,要是Python能執行js代碼就好了,不用管函數里面的邏輯了,只拿函數返回值就好了。

Python第三方包Execjs

可能是吧,不止我一個人遇到了這種情況,所以大佬們就開發出來這種工具包,用于執行js代碼。

安裝

在安裝之前,需要有node環境,這里就不舉栗子了,下一步下一步就好了。

pip3 install PyExecJS 

Execjs用法超級簡單的,幾行代碼。

執行js

注:由于上述js代碼會生成window對象,并不能直接執行成功,需要額外的其他輔助,這里簡單的舉一下其他例子。

正常js代碼

function add(x, y) { return x + y; } 

Python執行js代碼

import execjs 
 
ctx = execjs.compile(""" 
function add(x, y) { 
  return x + y; 
} 
""") 
print(ctx.call("add", 1, 2)) 

執行結果如下圖所示:

手把手教你如何使用Python執行js代碼

 

混淆js代碼

function add(bi1,Pl$2){return bi1+Pl$2} 

Python執行混淆js代碼

import execjs 
 
ctx = execjs.compile(""" 
function add(bi1,Pl$2){return bi1+Pl$2} 
""") 
print(ctx.call("add", 1, 2)) 

執行結果如下圖所示:

手把手教你如何使用Python執行js代碼

 

可以看到,即使再混淆,只要執行的是js代碼,都是沒啥問題的。

上述拼接時間返回的js混淆代碼也是可以執行的,但是它多了一個window對象,需要node安裝jsdom才行,由于網絡設置有問題,實在是下載不了舉例子,實在是抱歉。

或者使用selenium打開游覽器執行再返回也行,當然,速度更慢。

結尾

反爬和爬蟲一直都是一攻一防,以后可能這種情況會更嚴重,但是在Python龐大的生態中總能找到不錯的方案。人生苦短,Python當歌。

分享到:
標簽:代碼 Python js
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定