一、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/n/330325.html