Способы обновить страницу браузера? - PullRequest
0 голосов
/ 09 ноября 2019

Я просто хочу обновить страницу браузера для моего приложения «умное зеркало»! PIR-датчик обнаруживает человека, а затем сценарии python включают дисплей - когда он это делает, он также должен обновить страницу браузера (или, альтернативно, закрыть ее и открыть заново), чтобы мое приложение expressjs (server) /actjs (внешний интерфейс) получало новые данные. Так что я погуглил и опробовал разные методы в течение нескольких дней (и я до сих пор не нашел рабочего решения!)

1.

import webbrowser
import os
webbrowser.open('localhost:3000', new=1) 
//later on when PIR sensor toggles display OFF
//os.system("taskkill /f /im  /usr/bin/firefox.exe") //uncomment once open function works..

Проблема здесь: webbrowser.openбуквально ничего не делает, он даже не выбрасывает ошибок. Я жду и жду ..

2.

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r"/usr/local/bin/geckodriver.exe")
driver.get('localhost:3000)
//later on when PIR sensor toggles display OFF 
//driver.close()
//alternatively if browser window is already open
//driver.refresh()

проблема здесь: я получаю ошибку "Сообщение: исполняемый файл 'geckodriver.exe' должен быть в PATH", но я буквально установил егов пути PATH с использованием пути экспорта = $ PATH: /usr/local/bin/geckodriver.exe мой эхо-запрос $ PATH возвращает:

/ usr / local / sbin: / usr / local / bin: / usr /sbin: / usr / bin: / sbin: / bin: / usr / local / games: / usr / games: /usr/local/bin/geckodriver.exe

Так что он явно есть!

edit: geckodriver.exe, похоже, для Windows, поэтому я удалил его, так как / usr / local / bin уже включен в PATH по умолчанию, мне нужно только выполнить

driver = webdriver.Firefox()

Но тогда япоявляется похожая ошибка: «[Errno 8] Ошибка формата Exec:« geckodriver »». Это обычно означает, что моя система несовместима, но я скачал отсюда версию linux32 (https://github.com/mozilla/geckodriver/releases) и извлек ее в / usr / local /bin ... raspberry pi 3 должен быть 32-битным!

3.

import subprocess
import os
subprocess.call(["x-www-browser", "localhost:3000", "--no-sandbox"])
//later on when PIR sensor toggles display OFF 
//os.system("taskkill /f /im  /usr/bin/firefox.exe")

проблема здесь: это действительно открывает мой браузер хрома (даже если это не мои брови по умолчаниюэ-э!) но он не переходит на какой-либо URL, и в верхней части появляется всплывающее предупреждение об ошибке.

Метод 4, вероятно, будет выглядеть как выполнение файла JavaScript, содержащего window.location.reload (true), ноЯ еще не пробовал, так как все ответы на этот вопрос в Интернете очень сложны и требуют загрузки большого количества библиотек и изучения синтаксиса этих методов.

Метод 5 может создать пустой файл при обнаружении, в то время как мойJavascript также проверяет бесконечный цикл, если какие-либо новые файлы были добавлены, а затем выполняет window.location.reload (true) ... что было бы ... супер неэффективно

В целом, я бы предпочел метод 2(селен), чтобы работать, потому что там я также мог бы просто вызвать driver.refresh (), который бы позволил моему браузеру также оставаться в полноэкранном режиме (F11), поскольку вы не хотите видеть панель браузера при взгляде в интеллектуальное зеркало. .

Моя установка - raspberry pi 3 b + под управлением raspbian lite OS (дистрибутив linux), firefox-esr 60.9.0, селен 3.141, python3 и geckodriver 26 (32-разрядная версия Linux) .. Пожалуйста, помогите! Вы замечаете какие-либо ошибки? Вы когда-нибудь достигали чего-то похожего? Есть ли у вас какие-то дополнительные гениальные идеи, как я могу это сделать? Я действительно хочу обновить страницу проклятого браузера - я могу плакать ...

...