日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

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

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

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

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

2. 準(zhǔn)備

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

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

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

3. 方式一:PyExecJS

PyExecJS 是使用最多的一種方式,底層實(shí)現(xiàn)方式是:在本地 JS 環(huán)境下運(yù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īng)方法的傳入?yún)?shù)

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

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

4. 方式二:js2py

js2py作為一個純 Python 實(shí)現(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 的過程可能會報(bào)錯

更多功能可以參考:

https://github.com/PiotrDabkowski/Js2Py

5. 方式三:Node.js

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

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

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

//計(jì)算兩個數(shù)的和function add(num1, num2) { return num1 + num2;}//新增一個導(dǎo)出函數(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)境,運(yù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 種方式

實(shí)際爬蟲項(xiàng)目中,一般會先使用 node 命令進(jìn)行一次測試,確保沒問題后,再使用前 3 種方式的任意一種進(jìn)行 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的四種方式的詳細(xì)內(nèi)容,更多關(guān)于python 調(diào)用js的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91p九色成人| 亚洲一级大片| 亚洲va久久久噜噜噜久久| 麻豆国产欧美日韩综合精品二区| 婷婷成人综合| 麻豆国产精品一区二区三区| 午夜在线视频一区二区区别| 久久久久亚洲精品中文字幕| 国产欧洲在线| 福利一区二区三区视频在线观看| 天堂俺去俺来也www久久婷婷| 日韩影院二区| 久久精品日韩欧美| 日韩中文字幕无砖| 日韩欧美2区| 欧美日韩亚洲国产精品| 日韩精品一级中文字幕精品视频免费观看 | 日本中文字幕一区二区视频 | 欧洲在线一区| 精品久久一区| 国产精品亚洲综合久久| 国产日韩欧美一区在线| 亚洲一区二区小说| 激情欧美一区二区三区| 亚洲黄色网址| 国产精品一在线观看| 在线一区视频| 99国产精品久久久久久久| 久久精品官网| 国产一区久久| 91精品电影| 亚洲伦乱视频| 午夜国产精品视频免费体验区| 黑丝美女一区二区| 久久不射中文字幕| 蜜臀av一区二区三区| 久久中文字幕二区| 亚洲欧美一区在线| 欧美日韩国产精品一区二区亚洲| 蜜臀av免费一区二区三区| 麻豆国产欧美日韩综合精品二区| 国产亚洲一区二区手机在线观看 | 免费成人av在线播放| 日韩国产在线| 一区视频在线| 日本不卡视频一二三区| 精品国产黄a∨片高清在线| av高清不卡| 丝袜美腿诱惑一区二区三区| 成人精品亚洲| 日韩欧美中文字幕一区二区三区 | 亚洲激情偷拍| 日韩综合小视频| 九九色在线视频| 国产区精品区| а√天堂8资源中文在线| 亚洲资源av| 国产精品观看| 午夜视频精品| 欧美成a人片免费观看久久五月天| 日韩在线网址| 亚洲国产专区| 91精品韩国| 麻豆精品av| 久久午夜精品一区二区| 精品欧美久久| 国产精品久久久久av电视剧| 中文字幕亚洲影视| 欧美日韩中文一区二区| 久久国产婷婷国产香蕉| 亚洲欧美日韩专区| 免费日韩成人| 亚洲一区激情| 91九色精品国产一区二区| 精品亚洲a∨| 日韩激情一区二区| 欧美日韩国产探花| 久久久久国产| 高清一区二区| av资源新版天堂在线| 国产欧美一区二区精品久久久 | 亚洲日本国产| 久久久久久黄| 欧美激情视频一区二区三区免费| 色综合视频一区二区三区日韩| 国产suv精品一区| 精品国产一级| 精品高清久久| 国产精品一区二区三区av| 国产乱码精品一区二区亚洲| 日本不卡高清| 免费观看亚洲天堂| 日韩电影免费在线观看| 国产资源在线观看入口av| 欧美国产日韩电影| а√在线中文在线新版| 亚洲伦乱视频| 亚洲精品少妇| 激情黄产视频在线免费观看| 亚洲日本久久| 欧美影院视频| 久久男人天堂| 免费成人在线观看| 欧美日韩国产观看视频| 欧美~级网站不卡| 亚洲午夜黄色| 7777精品| 欧美一区二区三区激情视频| 蜜桃视频在线观看一区二区| 国产精品网站在线看| 亚洲女同av| 国产一区91| 狠狠久久伊人中文字幕| 在线国产一区二区| 免费在线成人| 国产亚洲精品v| 麻豆成人在线观看| 久久理论电影| 免费观看亚洲天堂| 亚洲精品精选| 亚洲免费黄色| 国产精品亚洲一区二区三区在线观看| 91亚洲无吗| 综合国产精品| 今天的高清视频免费播放成人| 人人精品久久| 日本欧美在线看| 久久国产免费| 亚洲www免费| 精品一区二区三区免费看| 妖精视频成人观看www| 91成人小视频| 国产亚洲精品精品国产亚洲综合| 免费日韩av片| 亚洲一区二区三区免费在线观看 | 国产精品免费不| 美女尤物久久精品| 亚洲一区久久| 日韩精品一区二区三区中文| 婷婷亚洲五月| 亚洲一级黄色| 欧美中文字幕一区二区| 日韩亚洲一区在线| 久久亚州av| 老司机免费视频一区二区三区| 国产欧美日韩在线一区二区| 国产三级一区| 国产精品亚洲欧美日韩一区在线| 日本中文字幕不卡| 久久av中文| av高清不卡| 国产一区二区三区不卡视频网站 | 日韩精品一区二区三区中文字幕| 免费久久精品| 91成人精品| 亚洲精选久久| 精品无人区麻豆乱码久久久 | 久久伦理在线| 久久亚洲风情| 国产精品亚洲二区| 亚洲调教视频在线观看| 四虎884aa成人精品最新| 极品日韩av| 国产精品毛片久久| 波多视频一区| 免费视频一区三区| 玖玖玖国产精品| 只有精品亚洲| 一本色道精品久久一区二区三区| 激情偷拍久久| 日韩精品免费观看视频| 国产日韩一区二区三区在线 | 午夜久久中文| 国产精品99一区二区| 午夜视频一区二区在线观看| 国产成人黄色| 免播放器亚洲一区| 国产盗摄——sm在线视频| 国产精品亲子伦av一区二区三区 | 国产欧美在线| 欧美日韩精品一本二本三本| 日本在线观看不卡视频| 红杏一区二区三区| 久久精品卡一| 精品久久电影| 国产另类在线| 日韩精品中文字幕一区二区| 欧美午夜精彩| 久久久久久久欧美精品| 欧美日韩激情| 999久久久国产精品| 日韩一区精品| 一区二区三区四区日韩| 久久国产精品99国产| 国产一区二区三区亚洲| 日韩二区在线观看| 国产精品美女| 一区在线观看| 久久久一二三| 日韩国产综合|