婷婷综合国产,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
    亚洲高清在线精品| 捆绑变态av一区二区三区| 日韩精品91亚洲二区在线观看| 久久国产生活片100| 91网站最新地址| 亚洲精品一区二区三区香蕉| 亚洲伊人伊色伊影伊综合网| 国产精品 日产精品 欧美精品| 欧美色精品在线视频| 国产精品久久三| 精品在线免费视频| 4438亚洲最大| 亚洲国产精品影院| k8久久久一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲一区电影777| 色婷婷久久综合| 欧美国产一区视频在线观看| 久久99久久久久久久久久久| 欧美日韩三级在线| 亚洲va欧美va人人爽| 精品久久久久久久久久久久久久久久久 | 亚洲另类在线视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产欧美日韩视频一区二区 | 日韩美女视频一区二区| 国产成人啪免费观看软件| 精品久久国产老人久久综合| 亚洲www啪成人一区二区麻豆| 欧美午夜精品久久久久久超碰| 日韩一区有码在线| a亚洲天堂av| 国产精品久久久久9999吃药| 国产成人8x视频一区二区 | k8久久久一区二区三区| 国产精品色婷婷久久58| av毛片久久久久**hd| 国产精品国产自产拍高清av王其| 高清国产一区二区| **欧美大码日韩| 日本精品视频一区二区| 亚洲欧美激情在线| 欧美日韩极品在线观看一区| 偷拍日韩校园综合在线| 欧美一级高清片| 国产乱子轮精品视频| 国产日韩欧美麻豆| 91丨九色丨蝌蚪富婆spa| 尤物在线观看一区| 51精品久久久久久久蜜臀| 韩国av一区二区三区| 中文字幕不卡在线播放| 91成人免费网站| 麻豆一区二区三区| 久久精品一区蜜桃臀影院| 99精品国产一区二区三区不卡| 亚洲一区二区在线播放相泽| 91精品久久久久久久91蜜桃| 国产一区二区视频在线播放| 国产精品久久久久久久久快鸭| 色综合久久天天综合网| 日韩成人av影视| 中文字幕国产精品一区二区| 欧美日韩中文精品| 国产大片一区二区| 偷拍一区二区三区四区| 国产视频一区不卡| 欧美剧情电影在线观看完整版免费励志电影| 日本免费在线视频不卡一不卡二| 中文字幕+乱码+中文字幕一区| 91国内精品野花午夜精品| 美女尤物国产一区| 亚洲色图清纯唯美| 亚洲精品在线三区| 欧美日韩一区二区三区四区| 国产在线不卡一卡二卡三卡四卡| 亚洲网友自拍偷拍| 国产亚洲成aⅴ人片在线观看| 欧美午夜精品一区二区三区| 国产精品一区免费视频| 亚洲国产精品一区二区www在线 | 日韩va亚洲va欧美va久久| 久久众筹精品私拍模特| 欧美体内she精高潮| 国产91丝袜在线18| 久久99热国产| 天天操天天干天天综合网| 中文字幕在线不卡视频| 久久免费午夜影院| 欧美一区二区三级| 欧美日韩精品一区二区在线播放| 99精品国产99久久久久久白柏| 国产一区在线观看麻豆| 免费人成精品欧美精品| 天天影视色香欲综合网老头| 一区二区欧美国产| 亚洲欧洲精品一区二区精品久久久| 日韩一级片网址| 欧美剧情片在线观看| 欧美私人免费视频| 色婷婷综合久久久中文一区二区| 成人性生交大合| 国产精品69毛片高清亚洲| 国产一区二区三区黄视频 | 激情综合一区二区三区| 日本中文在线一区| 午夜精品福利视频网站| 亚洲亚洲精品在线观看| 亚洲国产wwwccc36天堂| 一区二区三区加勒比av| 一区二区三区四区在线播放 | 制服丝袜国产精品| 欧美夫妻性生活| 欧美电影一区二区| 日韩一区二区三区在线| 日韩亚洲电影在线| 制服.丝袜.亚洲.中文.综合 | 欧美性感一区二区三区| 91免费在线视频观看| 色综合天天性综合| 欧美日韩一区在线| 日韩视频中午一区| 久久久久97国产精华液好用吗| 久久伊人中文字幕| 国产精品久久久久影院亚瑟| ●精品国产综合乱码久久久久| 亚洲欧美色图小说| 午夜精品福利一区二区三区av| 麻豆精品在线播放| 国产精品亚洲专一区二区三区| 99免费精品在线| 欧美高清性hdvideosex| 久久久蜜桃精品| 国产精品久久午夜| 天天综合天天做天天综合| 免费观看日韩av| 国产激情一区二区三区四区| 成人免费视频国产在线观看| 91麻豆自制传媒国产之光| 欧美视频一区二区三区四区| 日韩精品中文字幕在线不卡尤物| 久久精品一区二区三区不卡牛牛| 亚洲欧美色图小说| 免费人成精品欧美精品 | 韩国成人精品a∨在线观看| eeuss鲁一区二区三区| 欧美午夜精品理论片a级按摩| 精品91自产拍在线观看一区| 亚洲人成亚洲人成在线观看图片| 青青草视频一区| aaa亚洲精品| 日韩一区二区精品| 亚洲精品第1页| 国内成+人亚洲+欧美+综合在线| 9人人澡人人爽人人精品| 欧美精品v国产精品v日韩精品 | 高清不卡一二三区| 欧美日韩国产成人在线免费| 国产亚洲精久久久久久| 日韩影视精彩在线| 99久久婷婷国产综合精品电影 | 91福利区一区二区三区| 2023国产精品自拍| 亚洲国产精品一区二区久久恐怖片| 国产成人免费网站| 日韩亚洲欧美一区二区三区| 亚洲欧美日韩国产成人精品影院 | 国产大陆a不卡| 91精品国产aⅴ一区二区| 亚洲卡通欧美制服中文| 国产一区美女在线| 日韩一区二区三区视频| 亚洲综合另类小说| 91麻豆国产精品久久| 亚洲国产经典视频| 国产一区美女在线| 精品美女在线播放| 美女视频黄 久久| 欧美高清视频一二三区 | 久久久蜜桃精品| 久久99久久久久久久久久久| 欧美人妖巨大在线| 亚洲电影在线免费观看| 91在线视频观看| 中文字幕制服丝袜成人av| 国产精品一级黄| 久久精品一区蜜桃臀影院| 久久精品国产亚洲a| 欧美一区二区免费观在线| 视频一区二区三区在线| 欧美日韩和欧美的一区二区| 亚洲精品国产一区二区精华液| 91香蕉视频mp4| 亚洲精品乱码久久久久久久久| 91丝袜美女网| 一区二区三区小说| 欧美日产国产精品| 免费在线成人网| 久久久国产精品午夜一区ai换脸| 国产电影一区在线|