婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python 調用js的四種方式

python 調用js的四種方式

熱門標簽:電話機器人貸款詐騙 看懂地圖標注方法 佛山通用400電話申請 電話外呼系統招商代理 京華圖書館地圖標注 廣東旅游地圖標注 打印谷歌地圖標注 蘇州人工外呼系統軟件 淮安呼叫中心外呼系統如何

1. 前言

日常 Web 端爬蟲過程中,經常會遇到參數被加密的場景,因此,我們需要分析網頁源代碼

通過調式,一層層剝離出關鍵的 JS 代碼,使用 Python 去執行這段代碼,得出參數加密前后的 Python 實現

本文將聊聊利用 Python 調用 JS 的4種方式

2. 準備

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

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

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

3. 方式一:PyExecJS

PyExecJS 是使用最多的一種方式,底層實現方式是:在本地 JS 環境下運行 JS 代碼
支持的 JS 環境包含: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 execjs

from js_code import *

# 編譯加載js字符串
context1 = execjs.compile(js_from_file('./norm.js'))

最后,調用上下文對象的call() 方法執行 JS 方法
其中,參數包含:JS 代碼被調的方法名、對應方法的傳入參數

# 調用js代碼中的add()方法,參數為2和3
# 方法名:add
# 參數:2和3
result1 = context1.call("add", 2, 3)

print(result1)

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

4. 方式二:js2py

js2py作為一個純 Python 實現的 JS 解釋器,可以完全脫離 JS 環境,直接將 JS 代碼轉換為 Python 代碼

首先,安裝依賴庫

# 安裝依賴庫
pip3 install js2py

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

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

接著利用上下文對象執行 JS 腳本,轉換為 Python 代碼

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

最后,利用上下文調用 JS 中的方法,并制定輸入參數即可

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

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

更多功能可以參考:

https://github.com/PiotrDabkowski/Js2Py

5. 方式三:Node.js

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

首先,確保本地已經安裝了 Node.js 環境

修改 JS 腳本,新增一個導出函數 init ,方便內部函數被調用

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

//新增一個導出函數(node方式)
module.exports.init = function (arg1, arg2) {
    //調用函數,并返回
    console.log(add(arg1, arg2));
};

然后,將調用 JS 方法的命令組成一個字符串

# 組成調用js的命令
# node命令:node -e
cmd = 'node -e "require(\\"%s\\").init(%s,%s)"' % ('./norm', 3, 5)

最后,通過 os.popen 執行命令即可

pipeline = os.popen(cmd)

# 讀取結果
result = pipeline.read()

print('結果是:', result)

6. 方式四:PyV8

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

它不依賴本地 JS 環境,運行速度很快

import PyV8
from js_code import js_from_file

with PyV8.JSContext() as ctx:
    ctx.eval(js_from_file('./norm.js'))

# 調用js函數,指定參數
ctx.locals.add(1, 2)

更多功能可以參考:

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

7. 最后

上面總結了 Python 調用 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 調用js的四種方式的詳細內容,更多關于python 調用js的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python中json.dumps()函數的使用解析
  • python執行js代碼的方法
  • Python如何把不同類型數據的json序列化
  • Python 如何保存json文件并格式化
  • Python實現學生管理系統的代碼(JSON模塊)
  • Python解析JSON對象的全過程記錄
  • 使用python把json文件轉換為csv文件
  • Python3中對json格式數據的分析處理
  • python實現xml轉json文件的示例代碼
  • 基于telepath庫實現Python和JavaScript之間交換數據

標簽:呼和浩特 湖州 畢節 中山 江蘇 駐馬店 股票 衡水

巨人網絡通訊聲明:本文標題《python 調用js的四種方式》,本文關鍵詞  python,調用,的,四種,方式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 調用js的四種方式》相關的同類信息!
  • 本頁收集關于python 調用js的四種方式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色综合久久88色综合天天6 | 蜜臀久久久久久久| 国产日韩欧美a| 欧美一区二区视频免费观看| 成人精品高清在线| 精品系列免费在线观看| 日韩成人一区二区三区在线观看| 亚洲色图另类专区| 亚洲欧洲性图库| 国产精品久久久久久久久动漫| 久久色.com| 久久久久国色av免费看影院| 精品区一区二区| 日韩欧美国产一区二区三区| 欧美日韩国产a| 欧美精品乱码久久久久久 | 日韩视频免费直播| 97精品电影院| 成人18视频在线播放| 国产乱码精品一品二品| 亚洲激情一二三区| 国产网站一区二区三区| 国产99精品国产| 欧美电影一区二区| 一区二区三区中文字幕电影| 亚洲视频香蕉人妖| 国产精品视频一二| 国产精品成人网| 亚洲色图欧洲色图| 中文字幕一区日韩精品欧美| 亚洲免费观看高清完整版在线| 亚洲精品乱码久久久久久久久 | 欧美精品乱码久久久久久| eeuss鲁片一区二区三区| 色综合天天综合给合国产| 色哟哟国产精品| 欧美日韩一区视频| 91精品国产乱码| 久久一日本道色综合| 亚洲成人一二三| 亚洲成人激情社区| 极品少妇xxxx精品少妇| av在线一区二区| 欧美精品v日韩精品v韩国精品v| 日本精品视频一区二区| 日韩精品影音先锋| 18欧美乱大交hd1984| 日韩成人dvd| 国产成人av一区二区| 色中色一区二区| 91精品国产免费| 国产精品热久久久久夜色精品三区| 亚洲视频一二三| 美国毛片一区二区| 不卡视频一二三四| 欧美片网站yy| 中文字幕亚洲在| 狠狠网亚洲精品| 91影视在线播放| 精品人伦一区二区色婷婷| 一区二区三区四区在线播放| 久久99国内精品| 久久日韩粉嫩一区二区三区| 国产精品传媒视频| 精品一区二区三区在线观看| 一本大道久久a久久精品综合| 日韩久久精品一区| 亚洲国产精品影院| 91在线观看免费视频| 久久精品视频在线看| 国产精品一区在线观看你懂的| 成人av片在线观看| 日本系列欧美系列| 国产98色在线|日韩| 欧美亚洲国产怡红院影院| 久久精工是国产品牌吗| 成人欧美一区二区三区1314| 久久久精品欧美丰满| 日韩亚洲欧美中文三级| 制服.丝袜.亚洲.中文.综合| www国产亚洲精品久久麻豆| 久久久国产精品不卡| 欧美久久久久久蜜桃| 欧美三级一区二区| 波多野结衣欧美| 国产精品2024| 懂色av一区二区三区免费看| 亚洲精品中文在线影院| 亚洲午夜久久久久久久久电影院| 国产精品丝袜久久久久久app| 国产精品久久久久天堂| 亚洲一区二区三区四区在线| 日本不卡视频在线| 成人深夜福利app| 日本乱人伦一区| 欧美一级夜夜爽| 日韩欧美国产午夜精品| 久久精品日产第一区二区三区高清版| 国产精品免费久久| 天堂资源在线中文精品| 国内成人自拍视频| 日本道在线观看一区二区| 欧美一区二区三区色| 国产女人18毛片水真多成人如厕| 亚洲欧美韩国综合色| 久久精品国产精品青草| 不卡的av中国片| 欧美日韩精品欧美日韩精品一综合| 5566中文字幕一区二区电影| 日韩精品专区在线影院重磅| 亚洲欧洲精品天堂一级| 美女性感视频久久| 色婷婷狠狠综合| 久久毛片高清国产| 午夜影视日本亚洲欧洲精品| 粉嫩av一区二区三区在线播放| 欧美亚洲自拍偷拍| 中文字幕欧美三区| 久久成人久久鬼色| 欧美视频三区在线播放| 中文字幕二三区不卡| 国产成人午夜99999| 欧美三级中文字幕| 日韩视频免费观看高清完整版在线观看 | 欧美日韩一区国产| 26uuu色噜噜精品一区二区| 亚洲在线一区二区三区| 国产一区91精品张津瑜| 白白色亚洲国产精品| 日韩欧美一级特黄在线播放| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩网站在线看片你懂的| 国产精品久久久久久亚洲毛片 | 午夜久久久影院| 亚洲成人av电影在线| 国产裸体歌舞团一区二区| 91精品婷婷国产综合久久性色| 亚洲欧美视频在线观看视频| 成人精品国产一区二区4080| 精品国产乱码久久久久久免费| 国产亚洲精品福利| 国产精品影视网| 日韩精品一区二区三区四区 | 欧美日韩一区二区三区在线看| 国产乱人伦精品一区二区在线观看| 91视频观看视频| 日韩精品一区在线观看| 一区二区三区小说| 日本韩国一区二区三区视频| 亚洲欧美综合另类在线卡通| 99精品视频在线播放观看| 亚洲视频在线一区二区| 91蜜桃免费观看视频| 亚洲天堂网中文字| 色综合久久88色综合天天| 亚洲区小说区图片区qvod| 91丨porny丨在线| 五月婷婷综合激情| 精品三级在线观看| 福利一区福利二区| 亚洲天堂网中文字| 欧美日韩国产影片| 另类中文字幕网| 欧美国产精品中文字幕| a在线欧美一区| 日本免费新一区视频| 免费av网站大全久久| 欧美老年两性高潮| 欧美在线观看禁18| 成人黄色在线视频| 日韩欧美区一区二| 成人在线一区二区三区| 一区二区三区国产| 91精品国产综合久久香蕉的特点| 六月丁香婷婷色狠狠久久| 中文字幕一区二区三区四区| 欧美裸体一区二区三区| 国产一区二区三区免费看| 亚洲天堂免费在线观看视频| 91精品国产一区二区人妖| 99视频一区二区三区| 午夜欧美在线一二页| 久久精品亚洲国产奇米99| 欧美色网一区二区| 国产999精品久久| 香蕉久久一区二区不卡无毒影院 | 欧美经典一区二区三区| 一本大道久久a久久精二百 | 国产精品色噜噜| 欧美丰满少妇xxxxx高潮对白 | 亚洲综合自拍偷拍| 国产无一区二区| 欧美日韩三级一区二区| 成人免费视频一区| 精品一区二区三区免费观看| 亚洲国产视频直播| 中文字幕欧美一| 久久久久久久久久久久久女国产乱| 欧美吻胸吃奶大尺度电影| 成a人片亚洲日本久久|