婷婷综合国产,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
    国产精品家庭影院| 91美女片黄在线观看| 亚洲国产精品久久人人爱蜜臀| 国产亚洲一区二区三区| 欧美刺激脚交jootjob| 欧美一区二区三区思思人 | 国产精品入口麻豆原神| 精品福利av导航| 精品国产三级电影在线观看| 91麻豆精品国产91久久久久久久久| 欧美男同性恋视频网站| 日韩一卡二卡三卡四卡| 欧美mv日韩mv亚洲| 中文字幕不卡三区| 亚洲欧美日韩国产中文在线| 亚洲精品视频在线看| 亚洲国产欧美另类丝袜| 日韩高清国产一区在线| 韩国v欧美v日本v亚洲v| 成人手机在线视频| 欧洲av一区二区嗯嗯嗯啊| 欧美一区永久视频免费观看| 日韩精品中午字幕| 欧美激情一区二区三区在线| 亚洲靠逼com| 性久久久久久久久久久久| 激情综合色播激情啊| 国产精品一区二区三区99| 成人av电影在线| 在线免费不卡视频| 日韩视频免费直播| 国产精品日韩成人| 天天操天天色综合| 国产精品996| 欧美日韩成人一区二区| 久久久久高清精品| 亚洲超碰97人人做人人爱| 久99久精品视频免费观看| 成人h精品动漫一区二区三区| 色域天天综合网| 欧美一卡在线观看| 日本一不卡视频| 激情文学综合插| 色综合久久综合中文综合网| 日韩一区二区视频在线观看| 亚洲婷婷综合色高清在线| 老司机精品视频一区二区三区| 菠萝蜜视频在线观看一区| 欧美一区二区三级| 国产精品国产自产拍高清av| 蜜桃av一区二区| 色婷婷精品大在线视频 | 欧美一级日韩一级| 最新国产成人在线观看| 久久精品国产免费看久久精品| 91在线一区二区| 久久色成人在线| 奇米888四色在线精品| 亚洲一卡二卡三卡四卡| 日韩一区二区三| 国产精品久久三| 精品综合久久久久久8888| 欧美三级电影在线看| 国产嫩草影院久久久久| 九九国产精品视频| 欧美美女网站色| 亚洲国产人成综合网站| 在线观看中文字幕不卡| 综合欧美亚洲日本| 色综合久久88色综合天天免费| 久久精品一区二区| 国产精品亚洲第一| 久久精子c满五个校花| 国产精品99久| 中文字幕国产一区| 成人网页在线观看| 亚洲欧美综合色| 91免费视频大全| 亚洲久草在线视频| 欧美日韩午夜在线| 欧美午夜精品免费| 91精品国产一区二区三区| 一区二区三区国产豹纹内裤在线| av不卡一区二区三区| 综合在线观看色| 日本高清不卡在线观看| 亚洲一二三四久久| 欧美日韩精品三区| 蜜臀精品一区二区三区在线观看| 欧美一区二区精品在线| 精品无人码麻豆乱码1区2区 | 精品国产一二三区| 麻豆精品一二三| 欧美精品一区二区三区四区 | 欧美亚洲日本国产| 丝袜诱惑制服诱惑色一区在线观看 | 免费的国产精品| 91精品国产综合久久香蕉麻豆| 亚洲成a天堂v人片| 精品理论电影在线| 成人午夜av电影| 亚洲国产色一区| 精品国产麻豆免费人成网站| 国产在线精品不卡| 亚洲精品视频自拍| 精品盗摄一区二区三区| 99久久精品国产一区| 亚洲国产一区二区三区青草影视| 欧美成人综合网站| 91国产成人在线| 激情综合色综合久久综合| 国产精品国产a级| 日韩欧美中文字幕制服| 成人网在线播放| 日本不卡一区二区| 中文字幕亚洲区| 欧美一区二区三区爱爱| 99热这里都是精品| 日韩精品五月天| 国产精品视频线看| 欧美成人bangbros| 欧洲激情一区二区| 国产91在线观看丝袜| 亚洲成人免费观看| 中文字幕在线一区| 久久久久久9999| 欧美男人的天堂一二区| av一区二区三区黑人| 国产在线不卡视频| 婷婷开心激情综合| 中文字幕一区二区三区不卡在线| 欧美一区二区女人| 欧美视频精品在线| 色偷偷久久一区二区三区| 成人精品国产一区二区4080| 久久国产夜色精品鲁鲁99| 视频在线在亚洲| 亚洲一区二区三区在线| 又紧又大又爽精品一区二区| 亚洲国产精品精华液ab| 精品久久免费看| 日韩欧美国产电影| 制服丝袜成人动漫| 51精品国自产在线| 欧美日韩一区二区在线观看| 色婷婷av一区二区三区大白胸| 99这里只有久久精品视频| 国产91精品在线观看| 韩国成人福利片在线播放| 日韩电影在线一区二区| 日韩精品亚洲专区| 久久精品免费观看| 狠狠色丁香久久婷婷综| 国产精品一级在线| 国产成人av一区二区| 国产中文字幕精品| 福利一区二区在线| 91日韩精品一区| 欧洲一区二区三区在线| 精品视频在线视频| 91精品久久久久久久久99蜜臂| 欧美一级精品大片| 国产亚洲1区2区3区| 中文字幕第一区| 自拍偷拍亚洲综合| 夜夜精品浪潮av一区二区三区| 亚洲一区二区影院| 麻豆精品久久精品色综合| 国产福利一区二区三区视频| 不卡的av网站| 欧美日韩一区二区不卡| 精品少妇一区二区三区| 久久免费美女视频| 亚洲青青青在线视频| 亚洲va欧美va人人爽| 久久成人免费网| 成人高清av在线| 欧美性xxxxxxxx| 日韩精品影音先锋| 国产精品全国免费观看高清| 亚洲一区二区三区中文字幕| 美女性感视频久久| 成a人片亚洲日本久久| 欧美性xxxxx极品少妇| 精品电影一区二区三区| 亚洲精品视频一区二区| 男人的j进女人的j一区| 成人午夜看片网址| 欧美一级搡bbbb搡bbbb| 国产精品久久久久三级| 天堂影院一区二区| 成人性色生活片免费看爆迷你毛片| 欧美日韩亚洲另类| 中文字幕免费一区| 蜜臀va亚洲va欧美va天堂| 懂色av噜噜一区二区三区av| 欧美一级生活片| 一区二区三区精品在线| 国产成人av在线影院| 56国语精品自产拍在线观看|