最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python執(zhí)行js代碼的方法

 更新時間:2021年05月13日 15:20:08   作者:Python進(jìn)階者  
現(xiàn)在為了防止反爬,前端使用的反爬技術(shù)比較多的是js代碼混淆。python作為爬蟲界的扛把子,免不了和js打交道,因此我們需要了解如何使用Python執(zhí)行js代碼

什么是js代碼混淆?

正常代碼

我們現(xiàn)在看一段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;
}

    運(yùn)行一下這段代碼,如下圖所示。

混淆代碼

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

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

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

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

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

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

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

Python第三方包Execjs

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

安裝

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

pip3 install PyExecJS

執(zhí)行js

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

正常js代碼

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

Python執(zhí)行js代碼

import execjs

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

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

混淆js代碼

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

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

import execjs

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

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

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

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

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

以上就是python執(zhí)行js代碼的方法的詳細(xì)內(nèi)容,更多關(guān)于python執(zhí)行js代碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python破解RAR文件密碼的代碼實例

    使用Python破解RAR文件密碼的代碼實例

    這篇文章主要介紹了使用Python破解RAR文件密碼的代碼實例,rar 壓縮文件資源又不少是被加密的,密碼通常也比較簡單,我們可以通過暴力破解的方式來獲取,通常耗時也比較小,需要的朋友可以參考下
    2023-11-11
  • pytorch 實現(xiàn)變分自動編碼器的操作

    pytorch 實現(xiàn)變分自動編碼器的操作

    這篇文章主要介紹了pytorch 實現(xiàn)變分自動編碼器的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python3 實現(xiàn)口罩抽簽的功能

    python3 實現(xiàn)口罩抽簽的功能

    這篇文章主要介紹了python3 實現(xiàn) 口罩抽簽的功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Pygame實戰(zhàn)練習(xí)之紙牌21點(diǎn)游戲

    Pygame實戰(zhàn)練習(xí)之紙牌21點(diǎn)游戲

    21點(diǎn)想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機(jī)娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個簡單的21點(diǎn)小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Python3實現(xiàn)爬蟲爬取趕集網(wǎng)列表功能【基于request和BeautifulSoup模塊】

    Python3實現(xiàn)爬蟲爬取趕集網(wǎng)列表功能【基于request和BeautifulSoup模塊】

    這篇文章主要介紹了Python3實現(xiàn)爬蟲爬取趕集網(wǎng)列表功能,結(jié)合實例形式分析了Python3基于request和BeautifulSoup模塊的網(wǎng)站頁面爬取相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 玩轉(zhuǎn)Python發(fā)短信的實現(xiàn)

    玩轉(zhuǎn)Python發(fā)短信的實現(xiàn)

    用Python實現(xiàn)發(fā)短信功能,當(dāng)監(jiān)控到問題出現(xiàn)時,短信報警,使問題能得到及時的處理。當(dāng)然,我相信,用Python發(fā)短信應(yīng)用場景不止此一處,下面我們開始Python發(fā)短信的實現(xiàn),感興趣的朋友參考下吧
    2022-01-01
  • Python判斷dict中key是否存在的3種方法實例

    Python判斷dict中key是否存在的3種方法實例

    大家在學(xué)會python中的字典,會發(fā)現(xiàn),字典中是沒有特殊順序的,但是都存儲在一個特定的key下面,下面這篇文章主要給大家介紹了關(guān)于Python判斷dict中key是否存在的3種方法,需要的朋友可以參考下
    2022-04-04
  • Python多線程結(jié)合隊列下載百度音樂的方法

    Python多線程結(jié)合隊列下載百度音樂的方法

    這篇文章主要介紹了Python多線程結(jié)合隊列下載百度音樂的方法,實例分析了Python多線程及文件下載的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 淺談Python3中strip()、lstrip()、rstrip()用法詳解

    淺談Python3中strip()、lstrip()、rstrip()用法詳解

    這篇文章主要介紹了淺談Python3中strip()、lstrip()、rstrip()用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 12個Python程序員面試必備問題與答案(小結(jié))

    12個Python程序員面試必備問題與答案(小結(jié))

    這篇文章主要介紹了12個Python程序員面試必備問題與答案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06

最新評論

浏阳市| 鹤山市| 无极县| 嵊泗县| 桑植县| 温州市| 兴化市| 军事| 永康市| 奎屯市| 安康市| 太和县| 孟村| 眉山市| 淳化县| 龙游县| 灌阳县| 旬邑县| 六盘水市| 兴山县| 本溪市| 镶黄旗| 姜堰市| 外汇| 房山区| 包头市| 昌江| 汪清县| 兴安盟| 永靖县| 丘北县| 通海县| 兴文县| 南京市| 独山县| 苏尼特右旗| 兴化市| 巴中市| 张家口市| 丽江市| 沁源县|