<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2761字,需瀏覽 6分鐘

           ·

          2020-08-16 11:13

          ????點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          此曲只應(yīng)天上有,人間難得幾回聞。

          前言

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


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

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

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

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


          什么是js代碼混淆?

          正常代碼

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

          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)行一下這段代碼,如下圖所示。

          混淆代碼

          我隨便找了個(gè)在線的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

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

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

          ????這就造成了一個(gè)問題,我們?cè)谧雠老x時(shí),如果需要,多多少少可能都要研究一下js代碼,然后進(jìn)行js解密一下,但是,但是,要是代碼都混淆成了這了,還怎么解?

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

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


          Python第三方包Execjs

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


          安裝

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

          pip3 install PyExecJS

          Execjs用法超級(jí)簡(jiǎn)單的,幾行代碼。


          執(zhí)行js

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


          正常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代碼,都是沒啥問題的。

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

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


          結(jié)尾

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

          ????想學(xué)習(xí)更多關(guān)于Python的知識(shí),可以參考Python爬蟲與數(shù)據(jù)挖掘?qū)W習(xí)網(wǎng)址:http://pdcfighting.com/


          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看操逼的网站 | 人人操人人摸人人色 | 国产成人+综合亚洲+天堂 | 被扒开腿猛进入爽爽A片软件 | 免费A一级毛片在线播放 |