从网页在服务器上启动python脚本

从网页在服务器上启动python脚本,python,html,rest,server,Python,Html,Rest,Server,有没有办法从网页在服务器上启动python脚本 在工作中,我使用selenium制作了一个简单的python脚本来完成日常工作(打开一个网页并单击几个按钮) 我希望能够远程启动(仍在公司网络上),但由于工作中的安全性/权限,我无法使用telnet/shh/etc或安装PHP(我读过这是一种方法) 我之前做过简单的python服务器,它可以发送/接收REST请求,但我找不到一种方法来使用javascript(我对javascript有点熟悉)从网页发送。 我发现了一些人们建议使用AJAX的搜索结果

有没有办法从网页在服务器上启动python脚本

在工作中,我使用selenium制作了一个简单的python脚本来完成日常工作(打开一个网页并单击几个按钮)

我希望能够远程启动(仍在公司网络上),但由于工作中的安全性/权限,我无法使用telnet/shh/etc或安装PHP(我读过这是一种方法)

我之前做过简单的python服务器,它可以发送/接收REST请求,但我找不到一种方法来使用javascript(我对javascript有点熟悉)从网页发送。 我发现了一些人们建议使用AJAX的搜索结果,但我无法让它正常工作

它只需要一个空白页面,上面有一个按钮,就可以向我的服务器发送请求,然后服务器启动脚本


谢谢您的帮助。

我的示例是使用
烧瓶

因为你不需要一个空白,打开URL,你的selenium就会运行

from flask import Flask
app = Flask(__name__)

@app.route("/start")
def yourfunction():
    #start whatever you like here
    return #whatever you like to display eg. status / result 

参考资料:

您可以通过多种方式开始。 您可以尝试通过提供Python脚本

或者,您可以将脚本包装到web框架中,例如或。
考虑到您的代码相对较小,不需要在SQL中存储数据,也不需要与用户交互,您应该使用Flask,因为它非常轻量级,并且在web上有很好的文档记录。

一般来说,您可能希望编写一个简单的服务器,在GET请求中返回HTML表单,并在POST请求中处理该表单

例如,一个非常简单但完全有效的示例使用:

从瓶子导入获取、发布、运行
从子流程导入检查输出
@获取(“/”)
def home():
返回“”
@post(“/”)
提交时的def():
return“今天的日期是”+检查输出(['date'])。decode()
运行(host='localhost',port=8080)
或者只使用http.server的标准库文件,这是相同的概念,不过还有一些样板文件:

import http.server
import socketserver

from subprocess import check_output

class Handler(http.server.BaseHTTPRequestHandler):
    def html_preamble(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

    def do_GET(self):
        self.html_preamble()
        response = '<form method="post"><input type="submit" value="Click me!"></form>'
        self.wfile.write(response.encode('utf-8'))

    def do_POST(self):
        self.html_preamble()
        response = "Today's date is " + check_output(['date']).decode()
        self.wfile.write(response.encode('utf-8'))

PORT = 8081
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
导入http.server
导入socketserver
从子流程导入检查输出
类处理程序(http.server.BaseHTTPRequestHandler):
def html_前言(自我):
自我发送_响应(200)
self.send_标题(“内容类型”、“文本/html”)
self.end_头()
def do_获得(自我):
self.html_序言()
响应=“”
self.wfile.write(response.encode('utf-8'))
def do_POST(自我):
self.html_序言()
response=“今天的日期是”+检查输出(['date'])。decode()
self.wfile.write(response.encode('utf-8'))
端口=8081
将socketserver.TCPServer((“”,PORT),Handler)作为httpd:
打印(“在端口服务”,端口)
httpd.永远为你服务()

无论如何,既然您是用Python编写Selenium脚本的,那么您可能只需要导入相关函数并直接调用它们,而不是通过子流程,只需小心资源泄漏,并确保您的函数清除请求之间不需要保留的任何资源。

使用类似于
Flask
/
Django
/
Pyramid
设置
@路由
调用您的函数:)您的应用程序使用了什么“早期的简单python服务器,可以发送/接收REST请求"? 利用之前的经验,你可能更容易掌握答案。我们在大学里创建了一些SimpleHttpServer和socket服务器。它们的构建可能并没有那么简单,但是它们的功能非常简单。好的,这看起来是可以工作的。(尽管我觉得我花了很长时间才在windows上工作)。我想我会试试烧瓶,这似乎是大多数人的首选。
import http.server
import socketserver

from subprocess import check_output

class Handler(http.server.BaseHTTPRequestHandler):
    def html_preamble(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

    def do_GET(self):
        self.html_preamble()
        response = '<form method="post"><input type="submit" value="Click me!"></form>'
        self.wfile.write(response.encode('utf-8'))

    def do_POST(self):
        self.html_preamble()
        response = "Today's date is " + check_output(['date']).decode()
        self.wfile.write(response.encode('utf-8'))

PORT = 8081
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()