自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手教你如何使用Python執(zhí)行js代碼

開發(fā) 后端
各位小伙伴,大家好,這次咱們來說一下關(guān)于爬蟲方向的一個知識,Python如何執(zhí)行js,快來看看吧!!!

 前言

各位小伙伴,大家好,這次咱們來說一下關(guān)于爬蟲方向的一個知識,Python如何執(zhí)行js,快來看看吧!!!

[[337385]]

為什么要引出Python執(zhí)行js這個問題?

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

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

現(xiàn)在為了防止反爬,前端使用的反爬技術(shù)比較多的是js代碼混淆。

什么是js代碼混淆?

正常代碼

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

 

  1. function formatDate(now) { 
  2.     var now = new Date(1230999938); 
  3.     var year=now.getFullYear(); 
  4.     var month=now.getMonth()+1; 
  5.     var date=now.getDate(); 
  6.     var hour=now.getHours(); 
  7.     var minute=now.getMinutes(); 
  8.     var second=now.getSeconds(); 
  9.     return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second

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

 

 

 

 

混淆代碼

我隨便找了個在線的js代碼混淆網(wǎng)站。

js代碼

 

  1. 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 

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

 

 

 

 

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

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

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

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

Python第三方包Execjs

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

安裝

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

 

  1. pip3 install PyExecJS 

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

執(zhí)行js

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

正常js代碼

 

  1. function add(x, y) { 
  2.    return x + y; 

Python執(zhí)行js代碼

 

  1. import execjs 
  2.  
  3. ctx = execjs.compile(""
  4. function add(x, y) { 
  5.   return x + y; 
  6. """) 
  7. print(ctx.call("add", 1, 2)) 

執(zhí)行結(jié)果如下圖所示:

 

混淆js代碼

 

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

Python執(zhí)行混淆js代碼

 

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

執(zhí)行結(jié)果如下圖所示:

 

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

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

或者使用selenium打開游覽器執(zhí)行再返回也行,當(dāng)然,速度更慢。

結(jié)尾

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

責(zé)任編輯:華軒 來源: Python爬蟲與數(shù)據(jù)挖掘
相關(guān)推薦

2022-12-07 08:42:35

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2021-01-19 09:06:21

MysqlDjango數(shù)據(jù)庫

2022-07-27 08:16:22

搜索引擎Lucene

2021-09-26 16:08:23

CC++clang_forma

2019-05-05 11:47:09

TypeScript開發(fā)Node.js

2021-08-02 07:35:19

Nacos配置中心namespace

2020-12-08 10:32:15

Python郵件tcp

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2024-01-26 08:16:48

Exporter開源cprobe

2020-03-04 09:25:39

Python網(wǎng)絡(luò)安全WiFi

2023-09-16 18:48:28

代碼邏輯

2021-02-04 09:00:57

SQLDjango原生

2021-06-10 07:49:28

Python詞云圖wordcloud

2020-07-10 08:24:18

Python開發(fā)工具

2022-06-06 08:50:40

CIOIT轉(zhuǎn)型

2014-08-08 13:22:54

測試手機站點移動設(shè)備

2020-05-15 08:07:33

JWT登錄單點

2021-03-12 10:01:24

JavaScript 前端表單驗證
點贊
收藏

51CTO技術(shù)棧公眾號