【學習心得】Python調用JS的三種常用方法

????????在做JS逆向的時候,一種情況是直接用Python代碼復現JS代碼的功能,達成目的。但很多時候這種方法有明顯的缺點,那就是一旦JS代碼邏輯發生了更改,你就得重寫Python的代碼邏輯非常不便。于是第二種情況就出現了,我直接得到你的JS代碼片段,用Python去操作JS運行,并得到結果。這種做法的好處在于可以將JS代碼看成一個黑盒子,我不關心里面是怎么寫的,我只在乎是否輸出了正確的結果。

方法一、用Python的pyexecjs庫

pyexecjs庫允許在Python環境中執行JavaScript代碼,無需瀏覽器環境。在我的另一篇文章中詳細講了pyexecjs庫的用法,大家可以去看看哦!

http://t.csdnimg.cn/Eo29Dicon-default.png?t=N7T8http://xn--pythonpyexecjs-082ha0760esa4358l6pybfnik9rvpff4ap62eee2q

優點:

  • 簡單易用,無需啟動瀏覽器環境即可執行JavaScript代碼。
  • 在內存中執行JavaScript代碼,性能相對較高。

缺點:

  • 只能執行純JavaScript代碼,無法處理DOM操作或者利用瀏覽器特性的功能(如Web?API、HTML5特性等)。
  • 需要系統安裝支持的JavaScript運行時環境(如Node.js或Rhino等)。
  • 對于復雜或依賴特定環境的JavaScript代碼支持有限。

方法二、Python的selenium庫

????????selenium主要用于Web自動化測試,它可以啟動一個真實的瀏覽器(如Chrome、Firefox等)并模擬用戶操作。若要執行JavaScript代碼,可以利用execute_script方法。至于如何使用execute_script我這里給出一段參考的代碼:

# 導入webdriver模塊中的Options類(這里省略了import語句)
chrome_option = Options()# 設置Chrome瀏覽器啟動選項,使其在無頭模式下運行,即不顯示用戶界面
chrome_option.add_argument("--headless")# 禁用GPU硬件加速,這對于某些系統在headless模式下運行時是必要的
chrome_option.add_argument("--disable-gpu")# 忽略SSL證書錯誤,防止因為證書問題導致的網頁加載失敗
chrome_option.add_argument('--ignore-certificate-errors')# 使用前面設置好的Chrome啟動選項實例化一個Chrome瀏覽器對象
browser = webdriver.Chrome(options=chrome_option)# 定義要訪問的網址,并使用瀏覽器打開該網址
url = "替換成你想要處理的網址"
browser.get(url)# 在當前頁面上執行一段JavaScript代碼,并獲取其返回結果
result = browser.execute_script("你想執行的JS代碼片段")# 輸出執行JavaScript后得到的結果
print(result)# 暫停程序運行10秒,確保有足夠時間進行頁面加載或執行后續操作
time.sleep(10)# 關閉并退出瀏覽器
browser.quit()

優點:

  • 真實的模擬瀏覽器環境執行JavaScript代碼,因此能夠處理與DOM相關的操作,以及調用瀏覽器提供的所有Web?API和HTML5特性。
  • 適用于網頁自動化測試和爬蟲開發等場景,對網頁動態加載內容有良好的支持。

缺點:

  • 執行速度相比直接在內存中執行JavaScript慢,因為需要啟動和控制一個完整的瀏覽器實例。
  • 使用成本相對較高,需要配置對應的瀏覽器驅動程序。
  • 若只是簡單的JavaScript計算任務,使用selenium顯得較為笨重。

方法三、用node.js搭建一個HTTP?API后臺服務接口,開放給Python代碼調用

????????首先,在Node.js中創建一個HTTP服務器,并暴露執行JavaScript功能的API。然后,在Python中調用這個HTTP?API來執行JavaScript代碼

優點:

  • 提供了一種跨語言交互的解決方案,Python可以通過HTTP請求調用Node.js服務端的JavaScript代碼,靈活性較強。
  • Node.js服務可以封裝復雜的JavaScript邏輯,并進行優化和安全控制,提供給Python或其他客戶端調用。
  • 可以復用已有的JavaScript模塊和生態系統

缺點:

  • 需要額外搭建并維護一個HTTP服務,增加了系統的復雜性和部署成本。
  • HTTP請求存在網絡延遲,不適合對響應時間要求極高的場景
  • 如果API設計不當或未做足夠的安全性驗證,可能帶來安全風險。例如,在上述示例中直接執行用戶提供的JavaScript代碼是極其危險的,應避免在生產環境中這樣做。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711781.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711781.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711781.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python自動化管理和zabbix監控網絡設備(防火墻和python自動化配置部分)

目錄 前言 一、ssh配置 1.FW1 2.core-sw1 3.core-sw2 二、python自動化配置防火墻 三、驗證DNAT 四、驗證DNAT 前言 視頻演示請訪問b站主頁 白帽小丑的個人空間-白帽小丑個人主頁-嗶哩嗶哩視頻 一、ssh配置 給需要自動化管理的設備配置ssh服務端用戶名和密碼 1.FW1 …

純css實現-讓字符串在文字少時顯示為居中對齊,而在文字多時顯示為左對齊

純css實現-讓字符串在文字少時顯示為居中對齊,而在文字多時顯示為左對齊 使用flex實現 思路 容器樣式(.container): Flex容器的BFC性質使得其內部的子元素(.text-box)在水平方向上能夠居中,通過justify-c…

生態環境數據分析新篇章:Meta分析、R語言、Matlab、貝葉斯、結構方程模型等的前沿實踐

目錄 ①Meta分析在生態環境領域里的應用 ②R語言在生態環境領域中的應用 ③MATLAB在生態環境數據處理與分析中的應用 ④基于R語言piecewiseSEM結構方程模型在生態環境應用 ⑤R語言貝葉斯方法在生態環境領域中的高階技術應用 更多應用 為了Meta分析問題的設計、基礎理論、…

【菜鳥入門!】Matlab零基礎快速入門教程

數學建模競賽中,編程軟件是必不可缺少的,比如大家都熟知的MATLAB多數同學們都會經常用到,今天給大家介紹一些MATLAB的基本元素,希望幫助大家更好的掌握編寫基本的函數! 變量和數組 MATLAB 程序的基本數據單元是數組。一…

rm刪除未釋放空間,linux sync有時不起作用

此時需要重啟系統即可. Linux中的sync命令用于將文件系統的緩沖區數據立即寫入磁盤,以確保數據的持久性。123456 sync命令沒有任何選項,簡單執行即可。它會將文件系統緩沖區中的數據寫入磁盤,并更新文件系統的超級塊及其他元數據。使用sync命…

Vue.js的雙向綁定原理

Vue的雙向綁定 vue雙向綁定是其最重要的核心亮點,其原理也很簡單,這里做個簡單總結 vue2的雙向綁定是利用的Object.definePropertyvue3的雙向綁定是利用的 ES6Porxy中的defineProperty(target, propKey, propDesc 其作用類似于Object.defineProperty …

您想要擁有 Apple Vision Pro 的原因

自從2024年2月2日Apple Vision Pro發布以來,網上已經有很多關于如何使用這款蘋果最新設備的示例。該平臺引入的空間計算新世界能夠完成許多在其他設備上無法完成的事情。Reddit 上的這個人能夠以 51202160 的分辨率從他的 PC 上串流游戲!在本文中&#x…

SpringMVC01、回顧MVC

1、回顧MVC 1.1、什么是MVC MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規范。是將業務邏輯、數據、顯示分離的方法來組織代碼。MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。MVC不是一種設計模式,MVC是一種架構模式。…

Docker部署前后端服務示例

使用Docker部署js前端 1.創建Dockerfile 在項目跟目錄下創建Dockerfile文件: # 使用nginx作為基礎鏡像 FROM nginx:1.19.1# 指定工作空間 WORKDIR /data/web# 將 yarn build 打包后的build文件夾添加到工作空間 ADD build build# 將項目必要文件添加到工作空間&a…

數據結構—>帶你深入了解單鏈表(基礎篇)

?作者簡介:大家好,我是橘橙黃又青,一個想要與大家共同進步的男人😉😉 🍎個人主頁:橘橙黃又青-CSDN博客 前面我們學習了順序表,今天我們來學習與順序表類似的單鏈表 1.&#x1f3…

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:透明度設置)

設置組件的透明度。 說明: 從API Version 7開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。 opacity opacity(value: number | Resource) 設置組件的不透明度。 卡片能力: 從API version 9開始,該接口…

香橙派AIpro快速上手指南

1 前言 作為業界首款基于昇騰深度研發的AI開發板,Orange Pi AIpro無論在外觀上、性能上還是技術服務支持上都非常優秀,其8/20TOPS澎湃算力是目前開發板市場中所具備的最大算力,能覆蓋生態開發板者的主流應用場景,讓用戶實踐各種創…

深入理解Redis中的漸進式Rehash技術

1. 引言 Redis是一款高性能的鍵值存儲系統,被廣泛應用于緩存、隊列、計數器等場景,因其快速、穩定的特性備受開發者青睞。在Redis的背后,有著許多復雜的數據結構和算法支撐著其高效運行,而其中之一就是Rehash操作。 Rehash是Redis中的一個關鍵操作,負責在數據量增加時對…

Web自動化測試平臺開發---Automated_platform

一、項目簡介 歷時一個假期,Automated_platform 第一版完工,是一款基于po模式的自動化測試平臺,采用后端技術為DjangoceleryRabbitMQmysql 配置mysql數據庫,進行數據遷移后,運行項目后,即可成功訪問http://127.0.0.1:8…

5. 升級 Spring Boot(Upgrading Spring Boot)

5. 升級 Spring Boot(Upgrading Spring Boot) 項目 wiki 提供如何從 Spring Boot 早期版本升級的說明。請按照 release notes 部分查找要升級到的版本。 升級說明總是版本說明的第一部分。如果您的版本落后一個以上,請確保您已經查看了所跳…

【軟考】數據結構之隊列和棧

目錄 1.例題一1.1題目1.2 題目截圖1.3 題目分析 1.例題一 1.1題目 輸出受限的雙端隊列是指元素可以從隊列的兩端輸入,但只能從隊列的一端輸出,如下圖所示,若有e1,e2,e3,e4依次進入輸出受限的雙端隊列&…

Nginx-location匹配規則

每次配置Nginx的時候,不是多個這匹配不上就是那匹配不上,多個斜線少個斜線的,然后頭疼,尤其多層代理之后,真是瘋狂掉頭發 #mermaid-svg-Z1ScpZFefeixtnn3 {font-family:"trebuchet ms",verdana,arial,sans-s…

Linux——進程控制(一)進程的創建與退出

目錄 一、進程創建 1.寫時拷貝 2.創建多個進程 二、進程終止 1.main函數的返回值 2.bash中的$? 3.自定義退出碼 4.C語言的錯誤碼 5.錯誤碼與退出碼的區別 6.代碼異常終止 7.exit函數 8.總結 一、進程創建 在之前,我們學過linux中的非常重要的函數——…

Git 將dev1.0分支的某些commit合并到dev分支上

前言:dev1.0是新開發的需求內容,但是部分熱更內容在此分支提交,如今需要把熱更的內容發到dev環境,但是dev1.0新需求未開發完畢,不可更新到dev環境。 現在在dev1.0分支 git pull #拉取當前分支最新內容git log #查看最…

3. 文字陰影

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>文字陰影</title><style>*{margin: …