Python庫中可以操作JavaScript盤點解析
前言
我們都知道Python可以很輕松的實現(xiàn)某些功能,而且還可以編寫網(wǎng)頁,比如Remi,Pysimplegui,但是操作JavaScript這種瀏覽器的腳本語言,還是第一次聽說,小編也是第一次聽說,于是就跟大家腦補這一知識。
一、PyExecJS
是一個可以執(zhí)行JavaScript腳本的Python模塊,可以與網(wǎng)頁上的JavaScript進行交互,這樣就能更加精準的獲取到網(wǎng)頁中的加密內(nèi)容,如果用Python中的網(wǎng)絡(luò)模塊進行請求,會無法解密文檔中的加密內(nèi)容,這個時候使用我們的PyExecJS可以很方便到的解密網(wǎng)頁中的加密內(nèi)容,當(dāng)然這得你會Js逆向才可以。
不過要想PyExecJS解析JS語句沒毛病,還得整個Js語言解析環(huán)境,這里推薦NodeJS,尷尬。我們來看下PyExecJs的用法:
1.常規(guī)操作
import execjs aa=execjs.eval("'one|two|three'.split('|')") #執(zhí)行JavaScript代碼,將字符串分割形成數(shù)組 print(aa) e=execjs.compile(''' #編譯一個表達式 function add(x,y){ return x+y; } ''') print(e.call('add',10,20))#調(diào)用編譯好的函數(shù)并且賦值
也可以通過獲取引擎來運行我們的語句,如下:
print(execjs.get().eval('1+1'))
2.查看解釋引擎
print(execjs.get().name)
這里JavaScript的解釋引擎是JScript,我們還可以使用自己指定給力的引擎,比如“Nodejs”。
3.指定引擎
import execjs import os os.environ["EXECJS_RUNTIME"] = "Node" print(execjs.get().name)
也可以手動指定引擎,如下:
js1=execjs.get(execjs.runtime_names.JScript) print(js1.eval('1')) js2=execjs.get(execjs.runtime_names.Node) print(js2.eval('2'))
二、Js2Py
這個我覺得算是比較好的了,可以說是一個綜合體,它不需要依賴別的環(huán)境,可以獨立運行Js文件,只不過它的運行速度可能會稍微慢一點而已,但是這都不叫事。下面我們來看看它有哪些神器的功能吧。
1.常規(guī)操作,必須的
2.循環(huán)遍歷
import js2py aa=js2py.eval_js( ''' var i=0; for(var c=1;c<6;c++){ console.log(c); } ''' ) print(aa)
3.讀取Js文件
我們可以把JS文件寫入文件中,以便我們進行調(diào)用,如下:
1.js
function f(aa){ if(aa>11){ console.log('OK') }else{ console.log('Fail') } }
Python文件
import js2py with open('1.js','r') as f: aa=js2py.eval_js(f.read()) print(aa(11))
4.爬取網(wǎng)站數(shù)據(jù)
這里我們以淘寶為主,我想整它的JS腳本文件,如下:
import execjs import requests import re url = 'https://ai.taobao.com/?pid=mm_26632323_6762370_25910879' res=requests.get(url).text js=re.findall(r'<script>(.*?)</script>',res) print(js,'\n') js1=re.sub(r'eval\(','return(',js[0]) html="function getLego2WPK(){" + js1 + "};" ctx = execjs.compile(html) temp = ctx.call('getLego2WPK') print(temp)
三、PyV8
基于Google的V8引擎打造,遺憾的是目前只支持Python2版本,而且已不再維護,建議Python2的小伙伴可以去試試。
四、總結(jié)
本文主要盤點了3個可以操作JavaScript的Python庫,分別是PyExecJS、Js2Py和PyV8,只要我們用好了這些模塊以后玩爬蟲就能更加技高一籌,并且準確率更高了,更多關(guān)于Python庫操作JavaScript的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
思考分析Python運算中?a+=b?和?a=a+b是否相等
這篇文章主要為大家介紹了Python運算中a+=b和a=a+b是否相等及原理思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04python字典各式各樣操作從基礎(chǔ)到高級全面示例詳解
在Python中,字典(Dictionary)是一種強大而靈活的數(shù)據(jù)結(jié)構(gòu),它允許你存儲和檢索鍵值對,本文將深入探討Python中各式各樣的字典操作,包括基本操作、高級操作以及一些實用的技巧,通過全面的示例代碼,將展示如何充分發(fā)揮字典在Python編程中的優(yōu)勢2023-12-12Django的ListView超詳細用法(含分頁paginate)
這篇文章主要介紹了Django的ListView超詳細用法(含分頁paginate),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05django自帶的權(quán)限管理Permission用法說明
這篇文章主要介紹了django自帶的權(quán)限管理Permission用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05