Есть ли способ запустить скрипт Python на сервере с веб-страницы?
На работе я сделал простой скрипт на Python, используя селен для выполнения рутинной работы (откройте веб-страницу и нажмите несколько кнопок).
Я хочу иметь возможность запускать это удаленно (все еще в сети компании), но из-за безопасности/разрешений здесь, на работе, я не могу использовать telnet/shh/etc или установить PHP (который, как я читал, является одним из способов сделать это) .
Раньше я делал простые серверы Python, которые могут отправлять/получать запросы REST, но я не могу найти способ использовать javascript (который мне несколько удобен) для отправки с веб-страницы. Я нашел несколько результатов поиска, где люди предлагают AJAX, но я не могу заставить его работать
Это не должно быть чем-то большим, чем пустая страница с одной кнопкой, которая отправляет запрос на мой сервер, который, в свою очередь, запускает скрипт.
Спасибо за любую помощь.
Что вы использовали для своих «простых серверов Python ранее, которые могут отправлять/получать запрос REST»? Возможно, вам будет легче понять ответ, основанный на предыдущем опыте.
Когда-то в университете мы создали несколько серверов SimpleHTTPServer и серверов сокетов. Возможно, их было не так просто построить, но их функциональность была очень простой.






В моем примере используется Flask:
Поскольку вам не нужно просто пустое пространство, откройте URL-адрес, и ваш селен запустится.
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 через компьютерная графика.
В качестве альтернативы вы можете обернуть свой скрипт в веб-фреймворк, например Колба или Джанго. Принимая во внимание тот факт, что ваш код относительно невелик и ему не нужно хранить данные в SQL или взаимодействовать с пользователем, вам следует использовать Flask, потому что он довольно легкий и хорошо документирован в Интернете.
Я думаю, что попробую с Flask, похоже, это предпочтительный выбор для большинства.
Вообще говоря, вы хотели бы написать простой сервер, который возвращает HTML-форму по запросу GET и обрабатывает форму по запросу POST.
Например, очень упрощенный, но полностью рабочий пример с использованием Бутылка:
from bottle import get, post, run
from subprocess import check_output
@get('/')
def home():
return '<form method = "post"><input type = "submit" value = "Click me!"></form>'
@post('/')
def on_submit():
return "Today's date is " + check_output(['date']).decode()
run(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()
Во что бы то ни стало, поскольку вы написали скрипт Selenium на Python, вы можете просто импортировать соответствующую функцию и вызывать их напрямую, а не проходить через подпроцесс, просто будьте осторожны с утечками ресурсов и убедитесь, что ваша функция очищает любые ресурсы, которые не используются. не нужно хранить между запросами.
используя что-то вроде
Flask/Django/Pyramid, настраивая@routeвызывающую вас функцию :)