0

我创建了一个网页,其中包含一个名为foo(z). 为了这个问题,我们假设所有的foo(z)都是 call console.log(z)

是否可以运行可以触发foo(z)网页上存在的 JavaScript 函数的 Python 脚本?

换句话说,我在浏览器中加载了包含foo(z). 然后我在我的本地机器上执行 Python 脚本,它进入浏览器并调用 JavaScriptfoo(z)函数,因此您会看到z浏览器控制台的输出(因为所有foo(z)的都是调用console.log(z))。

似乎有很多关于使用 Python 执行 JavaScript 的信息,但我认为这些资源中没有任何一个涉及执行网页内的 JavaScript 函数。

编辑:我在人类可以玩的网页上构建了一个游戏。现在我想创建一个 Python 机器人,它可以调用网页上的 JavaScript 函数,以便它也可以玩游戏。

4

2 回答 2

0

您不能直接从 python 执行 javascript。

如果您正在运行本地服务器,则可以使用 websocket 与页面通信,并使其在 python 页面发出信号时执行 JS 函数。Flask框架很有用。

您还可以看到这个问题:如何从 Python 调用 Javascript 函数?.

于 2021-07-07T11:17:29.983 回答
0

嗨,一种可能的解决方案是使用带有flask的ajax在javascript和python之间进行通信。您将使用烧瓶运行服务器,然后在浏览器中打开该网站。通过这种方式,您可以在通过 pythoncode 或使用按钮创建网站时运行 javascript 函数,在本示例中它是如何完成的。

在 getJSON 中,函数参数接收 python 函数的结果。在这里,您可以根据输出运行 js 代码并将函数 foo(z) 作为 if 条件运行

您还可以使用烧瓶确定要向客户显示的 js 代码。

HTML 代码:



<html>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


<script>
    function pycall() {
      $.getJSON('/pycall', {content: "content from js"},function(data) {
          //run here your function on if(data.result==0) for example
          alert(data.result);
      });
    }
</script>


<button type="button" onclick="pycall()">click me</button>
 

</html>

蟒蛇代码:

from flask import Flask, jsonify, render_template, request

app = Flask(__name__)


def load_file(file_name):
    data = None
    with open(file_name, 'r') as file:
        data = file.read()
    return data

@app.route('/pycall')
def pycall():
    content = request.args.get('content', 0, type=str)
    
    print("call_received",content)
    return jsonify(result="data from python")

@app.route('/')
def index():
    return load_file("basic.html")



import webbrowser
print("opening localhost")
url = "http://127.0.0.1:5000/"
webbrowser.open(url)
app.run()

python中的输出:

call_received content from js

浏览器中的警报:

data from python

于 2021-07-22T11:54:57.457 回答