成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

python 調(diào)用js的四種方式

瀏覽:5日期:2022-06-22 17:17:03
1. 前言

日常 Web 端爬蟲過程中,經(jīng)常會遇到參數(shù)被加密的場景,因此,我們需要分析網(wǎng)頁源代碼

通過調(diào)式,一層層剝離出關(guān)鍵的 JS 代碼,使用 Python 去執(zhí)行這段代碼,得出參數(shù)加密前后的 Python 實現(xiàn)

本文將聊聊利用 Python 調(diào)用 JS 的4種方式

2. 準備

以一段簡單的 JS 腳本為例,將代碼寫入到文件中

//norm.js//計算兩個數(shù)的和function add(num1, num2) { return num1 + num2;}

其中,定義了一個方法,計算兩個數(shù)的和

3. 方式一:PyExecJS

PyExecJS 是使用最多的一種方式,底層實現(xiàn)方式是:在本地 JS 環(huán)境下運行 JS 代碼支持的 JS 環(huán)境包含:Node.js、PyV8、PhantomJS、Nashorn 等首先,我們需要安裝依賴包 PyExecJS

//py_exec_js_demo.py//安裝依賴pip3 install PyExecJS

然后,從 JS 文件中讀取源碼

def js_from_file(file_name): ''' 讀取js文件 :return: ''' with open(file_name, ’r’, encoding=’UTF-8’) as file:result = file.read() return result

最后,使用 execjs 類的compile()方法編譯加載上面的 JS 字符串,返回一個上下文對象

import execjsfrom js_code import *# 編譯加載js字符串context1 = execjs.compile(js_from_file(’./norm.js’))

最后,調(diào)用上下文對象的call() 方法執(zhí)行 JS 方法其中,參數(shù)包含:JS 代碼被調(diào)的方法名、對應方法的傳入?yún)?shù)

# 調(diào)用js代碼中的add()方法,參數(shù)為2和3# 方法名:add# 參數(shù):2和3result1 = context1.call('add', 2, 3)print(result1)

需要注意的,由于 PyExecJS 運行在本地 JS 環(huán)境下,使用之前會啟動 JS 環(huán)境,最終導致運行速度會偏慢更多功能可以參考:https://github.com/doloopwhile/PyExecJS

4. 方式二:js2py

js2py作為一個純 Python 實現(xiàn)的 JS 解釋器,可以完全脫離 JS 環(huán)境,直接將 JS 代碼轉(zhuǎn)換為 Python 代碼

首先,安裝依賴庫

# 安裝依賴庫pip3 install js2py

然后使用 js2py 中的EvalJs()方法生成一個上下文對象

# 使用獲取上下js2py生成一個上下文環(huán)境context = js2py.EvalJs()

接著利用上下文對象執(zhí)行 JS 腳本,轉(zhuǎn)換為 Python 代碼

# 執(zhí)行整段JS代碼context.execute(js_content)

最后,利用上下文調(diào)用 JS 中的方法,并制定輸入?yún)?shù)即可

# 使用上下文context調(diào)用具體的函數(shù)# 函數(shù)名:add# 參數(shù):1,2result = context.add(1, 2)print(result)

需要注意是,如果 JS 是很長的混淆代碼,轉(zhuǎn)換為 Python 的過程可能會報錯

更多功能可以參考:

https://github.com/PiotrDabkowski/Js2Py

5. 方式三:Node.js

實際上是使用 Python 的os.popen執(zhí)行 node 命令,執(zhí)行 JS 腳本

首先,確保本地已經(jīng)安裝了 Node.js 環(huán)境

修改 JS 腳本,新增一個導出函數(shù) init ,方便內(nèi)部函數(shù)被調(diào)用

//計算兩個數(shù)的和function add(num1, num2) { return num1 + num2;}//新增一個導出函數(shù)(node方式)module.exports.init = function (arg1, arg2) { //調(diào)用函數(shù),并返回 console.log(add(arg1, arg2));};

然后,將調(diào)用 JS 方法的命令組成一個字符串

# 組成調(diào)用js的命令# node命令:node -ecmd = ’node -e 'require('%s').init(%s,%s)'’ % (’./norm’, 3, 5)

最后,通過 os.popen 執(zhí)行命令即可

pipeline = os.popen(cmd)# 讀取結(jié)果result = pipeline.read()print(’結(jié)果是:’, result)6. 方式四:PyV8

PyV8 是 Google 將 Chrome V8 引擎用 Python 封裝的依賴庫

它不依賴本地 JS 環(huán)境,運行速度很快

import PyV8from js_code import js_from_filewith PyV8.JSContext() as ctx: ctx.eval(js_from_file(’./norm.js’))# 調(diào)用js函數(shù),指定參數(shù)ctx.locals.add(1, 2)

更多功能可以參考:

https://github.com/emmetio/pyv8-binaries

7. 最后

上面總結(jié)了 Python 調(diào)用 JS 的 4 種方式

實際爬蟲項目中,一般會先使用 node 命令進行一次測試,確保沒問題后,再使用前 3 種方式的任意一種進行 Python 改寫

示例代碼地址:https://github.com/xingag/tools_python/tree/master/Python%E6%89%A7%E8%A1%8CJS%E6%80%BB%E7%BB%93

以上就是python 調(diào)用js的四種方式的詳細內(nèi)容,更多關(guān)于python 調(diào)用js的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲国产一区视频| 一级做a爱片久久| 美国三级日本三级久久99| 影音先锋久久精品| 久久你懂得1024| 国产福利一区二区三区视频在线 | 91精品免费在线| 日韩成人午夜电影| 国产精品日本| 亚洲精品中文字幕在线观看| 国产精品mm| 国产精品系列在线| 欧美精品播放| 国产亚洲制服色| 99re热视频精品| 久久亚洲捆绑美女| 成人午夜在线播放| 欧美一区二区三区思思人| 狠狠色狠狠色综合| 精品视频在线看| 久久精品国产网站| 欧美精品1区2区3区| 国内精品国产成人国产三级粉色| 欧美网站一区二区| 美国毛片一区二区三区| 欧美手机在线视频| 韩国毛片一区二区三区| 欧美日本在线播放| 国产久卡久卡久卡久卡视频精品| 欧美色手机在线观看| 黄一区二区三区| 91精品国产一区二区| 国产凹凸在线观看一区二区 | 亚洲一区日韩在线| 午夜av一区二区| 日本韩国精品在线| 国产一区在线看| 日韩视频免费观看高清完整版| 风间由美性色一区二区三区| 精品少妇一区二区三区| 91视频国产观看| 亚洲欧洲一区二区在线播放| 国产欧美日韩亚洲一区二区三区| 亚洲电影第三页| 欧美在线视频不卡| 国产凹凸在线观看一区二区| 久久九九久精品国产免费直播| 黄色亚洲大片免费在线观看| 亚洲一区视频在线| 欧美调教femdomvk| 成人福利电影精品一区二区在线观看| 久久精品在这里| 国产视频一区免费看| 蜜桃久久久久久| 欧美成人女星排行榜| 一色屋精品视频在线看| 亚洲h在线观看| 91精品欧美久久久久久动漫| 97久久精品人人爽人人爽蜜臀| 亚洲人成影院在线观看| 日本高清不卡在线观看| 成人免费av在线| 亚洲视频 欧洲视频| 91国偷自产一区二区开放时间| 国产精品一二三| 中文字幕制服丝袜一区二区三区 | 精品入口麻豆88视频| 91久久精品一区二区别 | 中文字幕一区二区三区四区| 久久久久欧美| 懂色av一区二区三区蜜臀| 国产精品久久综合| 91国产精品成人| 91麻豆自制传媒国产之光| 午夜精品123| 久久亚洲影视婷婷| 久久午夜精品一区二区| 不卡一区二区在线| 午夜精品爽啪视频| 亚洲精品一区二区在线观看| 亚洲一区二区动漫| jlzzjlzz亚洲女人18| 亚洲一区二区av在线| 日韩免费视频一区| 久久久精品性| 色综合中文字幕| 美女网站在线免费欧美精品| 中文字幕第一区| 欧美美女一区二区在线观看| 国内精品久久久久国产盗摄免费观看完整版| 日韩国产成人精品| 国产精品久久免费看| 欧美日韩亚洲高清一区二区| 黄色综合网站| 成人永久aaa| 蜜臀av一区二区在线免费观看| 国产三级一区二区三区| 欧美日韩国产123区| 99香蕉国产精品偷在线观看 | 蜜臀久久久久久久| 国产精品白丝在线| 精品国产乱码久久久久久老虎| 亚洲男女自偷自拍| 一本大道久久a久久精二百| 色综合色综合色综合色综合色综合 | 亚洲欧美在线另类| 精品日韩av一区二区| 欧洲一区二区三区在线| 亚洲美女色禁图| 午夜国产精品视频免费体验区| 韩国v欧美v亚洲v日本v| 亚洲一卡二卡三卡四卡| 国产精品麻豆99久久久久久| 精品捆绑美女sm三区| 欧美日韩精品专区| 久久精品女人天堂| 日韩午夜精品| 欧美日韩视频在线一区二区观看视频| 国产久卡久卡久卡久卡视频精品| 日本免费新一区视频| 亚洲小说欧美激情另类| 亚洲人精品午夜| 亚洲欧美一区二区视频| 国产香蕉久久精品综合网| 欧美大片一区二区三区| 欧美顶级少妇做爰| 欧美在线看片a免费观看| 色视频成人在线观看免| 久久久精品性| 久久久精品动漫| 久久精品观看| 免费中文字幕日韩欧美| 亚洲免费网址| 久久av一区二区三区| 男女精品视频| 香蕉久久夜色精品国产| 国产女优一区| 久久国产精品久久久久久电车| 国产精品日韩欧美一区二区三区| 亚洲国产日韩美| 亚洲精品1区2区| 国产日本精品| 国产一区二区高清| 男女精品网站| 欧洲中文字幕精品| 91精品福利在线一区二区三区| 欧美精品一卡两卡| 日韩视频一区在线观看| 久久亚洲精华国产精华液| 国产亚洲精品久| 国产精品全国免费观看高清| 自拍偷拍欧美激情| 亚洲永久免费视频| 蜜臀久久99精品久久久画质超高清| 麻豆精品在线播放| 国产一区二区视频在线播放| 国产精品69毛片高清亚洲| 成人午夜电影网站| 91亚洲国产成人精品一区二三| 欧美日韩天天操| 亚洲最黄网站| 久久亚洲国产精品日日av夜夜| 欧美视频一区二区三区四区| 欧美一区二区三区思思人| 久久精品欧美日韩| 亚洲美女区一区| 秋霞午夜av一区二区三区| 国产自产视频一区二区三区| 成人中文字幕在线| 国内一区二区三区| 性刺激综合网| 日韩一级片在线观看| 国产欧美一区二区精品婷婷| 一区二区三区中文免费| 视频一区视频二区中文| 国产又黄又大久久| 国产精品九九| 在线精品视频免费观看| 日韩精品一区二区三区中文精品| 国产精品色哟哟| 日韩高清在线不卡| 成人黄色片在线观看| 亚洲国产精品日韩| 欧美午夜电影在线播放| 国产偷国产偷亚洲高清人白洁| 亚洲另类色综合网站| 久久精品国产免费| 欧美涩涩网站| 在线观看免费一区| 国产精品三级在线观看| 日本成人在线视频网站| 97久久精品人人做人人爽50路| 美女黄色成人网| 欧美精品一区二区三区蜜桃| 亚洲一区二区影院| 大白屁股一区二区视频| 国产精品久久九九| 精品国产亚洲一区二区三区在线观看| 亚洲免费毛片网站| 国产mv日韩mv欧美|