Итак, у меня был сценарий Python socketio, который регистрируется на веб-сайте и выполняет некоторую обработку, а затем сохраняет результат в переменной. Этот процесс селена определяется в функции, которая запускается, когда пользователь нажимает на кнопку из внешнего интерфейса. Ниже приведен короткий фрагмент того, что я сделал:
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
def selenium_process(data):
(Some process that involves selenium)
values = stores the result
..
..
..
return values
@socketio.on('message')
def handle_message(message):
dataval = selenium_process(data)
socketio.emit('showresult',dataval)
if __name__ == '__main__':
socketio.run(app,host='my_ip',port=random_port)
Это пример файла html + js, который действует как клиент:
<html>
<head>
<script src='http://code.jquery.com/jquery-1.7.2.min.js'></script>
<script src='http://localhost:3001/socket.io/socket.io.js'></script>
<script>
<button onclick="myFunction()">Click me</button>
var socket = io.connect('http://localhost:3001');
function myFunction()
{
data = {}
socket.emit('message',data);
}
socket.on('showresult') {
console.log(data);
});
</script>
</head>
</html>
Код работает нормально, хотя результат, полученный от сервера python, отправляется только один раз обратно js-клиенту после завершения процесса selenium. После этого мне нужно вручную обновить веб-страницу и затем выполнить команду emit, чтобы получить сообщение на внешнем интерфейсе. .
Какую ошибку я делаю?
EDIT:
Процесс:
- Я нажал кнопку «Нажми меня» на клиенте js, который запускает процесс селена на стороне сервера python.
- Идет небольшая обработка, которая включает регистрацию на веб-сайте и выборку данных вместе с нумерацией страниц.
-Результат сохраняется в переменной, а затем сервер отправляет этот результат обратно клиенту.
- На стороне клиента результат отображается на консоли.
- Таким образом, это происходит только один раз. Если бы я нажал кнопку «Нажми меня» еще раз без обновления, снова начался бы процесс, данные были бы извлечены и сохранены в переменной, но на этот раз функция «выбросить» не будет работать по какой-то причине.
Так что мой вопрос был, будет ли работать больше одного раза (после того, как функция вернет данные), даже если я не обновлю страницу?