Я просто хочу обновить страницу браузера для моего приложения «умное зеркало»! 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) .. Пожалуйста, помогите! Вы замечаете какие-либо ошибки? Вы когда-нибудь достигали чего-то похожего? Есть ли у вас какие-то дополнительные гениальные идеи, как я могу это сделать? Я действительно хочу обновить страницу проклятого браузера - я могу плакать ...