Python中PyExecJS(執(zhí)行JS代碼庫(kù))的具體使用
一、pyexecjs庫(kù)是什么?
pyexecjs是一個(gè)用Python來(lái)執(zhí)行JavaScript代碼的工具庫(kù),該庫(kù)支持多種JavaScript運(yùn)行時(shí)環(huán)境,如Node.js、PhantomJS、SlimerJS等,允許開(kāi)發(fā)者在Python中無(wú)縫地調(diào)用和執(zhí)行JavaScript代碼。
二、常見(jiàn)使用場(chǎng)景
在Web爬蟲(chóng)開(kāi)發(fā)或者處理JavaScript加密內(nèi)容的場(chǎng)景下,pyexecjs尤為有用,例如當(dāng)網(wǎng)頁(yè)中的數(shù)據(jù)是通過(guò)JavaScript動(dòng)態(tài)加載或加密時(shí),可以直接在Python程序中執(zhí)行JavaScript函數(shù)來(lái)獲取或解密這些數(shù)據(jù)。
二、pyexecjs庫(kù)怎么用?
# 安裝 pip install pyexecjs
(1)execjs必學(xué)方法eval
import execjs
# 必須掌握的函數(shù)之一 eval(expression)
"""
功能:如果你沒(méi)有特定的JavaScript文件,而是想直接執(zhí)行給定的JavaScript表達(dá)式代碼時(shí)使用(使用內(nèi)置運(yùn)行時(shí))
參數(shù):expression是要執(zhí)行的JavaScript字符串表達(dá)式。
返回值:js執(zhí)行結(jié)果。
"""
e = execjs.eval('a = new Array(1,2,3)')
print(e)(2)execjs必學(xué)方法complie
import execjs
# 必須掌握的函數(shù)之二 compile()
"""
功能:用于編譯JavaScript代碼,創(chuàng)建一個(gè)可執(zhí)行的上下文。這個(gè)上下文可以用來(lái)執(zhí)行預(yù)編譯好的JavaScript表達(dá)式或函數(shù)
參數(shù):source必填參數(shù),類型為字符串,表示要編譯的JavaScript代碼。
返回值:返回一個(gè)execjs.Context對(duì)象實(shí)例,該實(shí)例擁有eval、call等方法,可以用來(lái)執(zhí)行JavaScript代碼并獲取結(jié)果
"""
# 可以直接編譯一段js片段
js_code1 = """
function add(a, b) {
return a + b;
}
"""
# 可以編譯一個(gè)js文件
with open('test.js', 'r') as f:
js_code2 = f.read()
# 編譯js代碼
ctx1 = execjs.compile(js_code1)
result = ctx1.call("add", 1, 2)
print(result)
ctx2 = execjs.compile(js_code2)
result = ctx2.call("add", 1, 2)
print(result)(3)execjs必學(xué)方法call
import execjs
# 必須掌握的函數(shù)之二 call(function_name, *args, **kwargs)
"""
功能:調(diào)用在JavaScript環(huán)境中定義的函數(shù),并將Python變量作為參數(shù)傳入給這個(gè)JavaScript函數(shù)。
參數(shù):
- function_name:字符串類型,表示要調(diào)用的JavaScript函數(shù)名。
- *args:可變位置參數(shù)列表,這些參數(shù)會(huì)被轉(zhuǎn)換并作為對(duì)應(yīng)的JavaScript函數(shù)的參數(shù)傳入。
- **kwargs:可變關(guān)鍵字參數(shù)字典,這些參數(shù)同樣會(huì)被轉(zhuǎn)換后作為JavaScript函數(shù)的命名參數(shù)傳入。
返回值:返回執(zhí)行JavaScript函數(shù)后的結(jié)果。這個(gè)結(jié)果可以是任何JavaScript數(shù)據(jù)類型,在Python端通常會(huì)被轉(zhuǎn)換為相應(yīng)的Python類型(例如,JavaScript對(duì)象會(huì)被轉(zhuǎn)換為Python字典等)。
"""
# js代碼片段
js_code = """
function add(a, b) {
return a + b;
}
"""
# 創(chuàng)建并編譯js上下文
ctx = execjs.compile(js_code)
# 使用call方法來(lái)調(diào)用js代碼中的函數(shù)
result = ctx.call('add', 10, 2)
print(result)到此這篇關(guān)于Python中PyExecJS(執(zhí)行JS代碼庫(kù))的具體使用的文章就介紹到這了,更多相關(guān)PyExecJS使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)監(jiān)控內(nèi)存使用情況和代碼執(zhí)行時(shí)間
我的代碼的哪些部分運(yùn)行時(shí)間最長(zhǎng)、內(nèi)存最多?我怎樣才能找到需要改進(jìn)的地方?在開(kāi)發(fā)過(guò)程中,我很確定我們大多數(shù)人都會(huì)想知道這一點(diǎn)。本文總結(jié)了一些方法來(lái)監(jiān)控?Python?代碼的時(shí)間和內(nèi)存使用情況,希望對(duì)大家有所幫助2023-01-01
Python永久配置國(guó)內(nèi)鏡像源安裝再也不用擔(dān)心卡頓
這篇文章主要為大家介紹了Python如何永久配置國(guó)內(nèi)鏡像源,從此安裝再也不用擔(dān)心卡頓,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Python巧用delattr實(shí)現(xiàn)提升代碼可擴(kuò)展性與打包效率
在Python的動(dòng)態(tài)世界里,我們習(xí)慣了用setattr來(lái)動(dòng)態(tài)賦予對(duì)象屬性,用getattr來(lái)探查未知,但你是否曾正視過(guò)delattr,下面小編就和大家詳細(xì)講講delattr的具體使用吧2026-01-01
tensorflow中的數(shù)據(jù)類型dtype用法說(shuō)明
這篇文章主要介紹了tensorflow中的數(shù)據(jù)類型dtype用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法
今天小編就為大家分享一篇關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python中生成13位時(shí)間戳的常見(jiàn)方法
這篇文章主要為大家詳細(xì)介紹了Python中生成13位時(shí)間戳的常見(jiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-11-11

