一、Python調用JS函數
Python中可以通過selenium或者WebView等工具實現在瀏覽器中執行JavaScript函數。假設我們有如下的JS代碼:
function add(a, b) {
return a + b;
}
通過selenium,我們可以這樣調用這個函數:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://example.com")
res = driver.execute_script("return add(1,2);")
print(res) # 3
也可以直接在頁面中調用,如:
elem = driver.find_element_by_id("element_id")
res = driver.execute_script("return arguments[0].textContent;", elem)
這樣就能在python中調用JS函數了。
二、Python調用JS方法
如果我們有如下的JS對象:
var person = {
firstName: "John",
lastName : "Doe",
fullName : function() {
return this.firstName + " " + this.lastName;
}
}
我們可以通過以下代碼在Python中調用它的方法:
res = driver.execute_script("return person.fullName();")
print(res) # "John Doe"
三、Python調用JS代碼
如果我們有一個包含JS代碼的文件,在Python中可以這樣調用:
with open("file.js", "r") as f:
jscode = f.read()
res = driver.execute_script(jscode)
四、Python調用JS文件
如果我們有一個包含JS代碼的文件,在Python中可以這樣調用:
with open("file.js", "r") as f:
jscode = f.read()
driver.execute_script(jscode)
五、Python調用JS點擊無效
在某些情況下,使用Python點擊按鈕可能不會起作用,因為瀏覽器的JavaScript事件處理程序使用非同步代碼執行,而Python執行代碼時是同步的。使用JavaScript模擬點擊可以解決這個問題:
elem = driver.find_element_by_id("element_id")
driver.execute_script("arguments[0].click();", elem)
六、聊聊Python調用JS的幾種方式
除了以上介紹的方法,Python中還有其他幾種方式可以調用JS代碼。
1. 使用PyExecJS模塊
PyExecJS是一個Python庫,提供了一種跨平台的方法來執行JavaScript代碼。它支持多種JavaScript運行環境,包括node.js、Apple的JavaScriptCore和Mozilla的SpiderMonkey等。
例如,我們可以這樣調用外部JS文件:
import execjs
with open("file.js", "r") as f:
jscode = f.read()
ctx = execjs.compile(jscode)
result = ctx.call("functionName", args)
2. 使用pyv8模塊
pyv8是Google V8 JavaScript引擎的Python綁定。V8是Google開發的高性能JavaScript引擎,被用於其瀏覽器Google Chrome中。pyv8可以在Python中通過V8來執行JS代碼。
例子:
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
ctxt.eval("var a = 1;")
res = ctxt.eval("a+1;")
print(res) # 2
3. 使用websocket連接瀏覽器
還可以通過websocket連接到運行在另一台計算機上的瀏覽器,並在Python中執行JS代碼。
七、Python調用JS ES模塊
在ES6中,可以使用模塊化導入和導出JavaScript代碼。我們可以使用以下代碼將ES模塊導入到Python中:
from js import require
module = require("./module")
result = module.functionName(args)
八、Python調用JS的庫
當我們在調用一些JavaScript庫時,可以使用js2py庫將其導入到Python中。
如果我們希望在Python中使用Moment.js庫,我們可以這樣做:
import js2py
with open("moment.js", "r") as f:
jscode = f.read()
moment = js2py.eval_js(jscode)
res = moment().format('MMMM Do YYYY, h:mm:ss a') # 格式化時間
print(res)
九、Python調用JSON文件
如果我們有一個包含JSON數據的文件,我們可以使用json模塊將其載入到Python中。
import json
with open("data.json", "r") as f:
data = json.load(f)
print(data)
然後,我們可以將數據傳遞給JavaScript代碼,如:
json_data = json.dumps(data)
driver.execute_script("var data={0}; myFunction(data);".format(json_data))
以上是Python調用JavaScript的多種方式,使用場景和代碼示例。可以根據實際需求選擇適合的方法,實現Python與JavaScript的交互。
原創文章,作者:GNRGU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330325.html