J'ai besoin d'exécuter un script Python qui utilise Sélénium WebDriver:script Python WebDriver OK de la console mais ne démarre pas comme un service Upstart
import platform
from selenium import webdriver
from pyvirtualdisplay import Display
driver = None
if platform.system() == 'Linux':
print("Initializing browser for chrome...")
DISPLAY = Display(visible=0, size=(800, 600))
DISPLAY.start()
print("Started display")
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome('/usr/local/bin/chromedriver', chrome_options=chrome_options)
print("Done init chrome")
connected = True
else:
try:
print("Starting firefox...")
driver = webdriver.Firefox()
connected = True
except:
print("Could not connect through firefox")
if driver:
print("driver ok")
driver.quit()
print("All ok")
Le script est exécuté OK de la console:
sudo ~/environments/scrapers/bin/python test_webdriver.py
Initializing browser for chrome...
Started display
Done init chrome
driver ok
All ok
Mais donne une erreur de WebDriverException si vous essayez d'exécuter en utilisant une strophe exec avec Upstart:
Initializing browser for chrome...
Started display
...
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac),platform=Linux 4.8.0-58-generic x86_64)
J'ai ajouté des chemins éventuellement absents dans le script upstart, comme ceci
env PYTHON_HOME=/home/rsa-key-20161031/environments/scrapers
env PATH=/usr/local/bin:/usr/bin:$PYTHON_HOME:$PATH
env ENV=production
env DISPLAY=:10
chdir /home/user/project
console log
exec $PYTHON_HOME/bin/python test_webdriver.py
Sans effet. La recherche d'erreur ne donne rien de spécifique à cela. Toute idée sur la façon de le faire fonctionner est très appréciée.
Mise à jour: Ma solution actuelle est d'utiliser Cron car il ne semble pas avoir de problèmes avec Xvfb. J'aimerais toujours beaucoup savoir s'il est possible d'exécuter une tâche webdriver en tant que service. J'ai également essayé d'utiliser Selenium comme pilote web distant, avec les mêmes résultats négatifs (Chrome quitte après apparemment ne pas pouvoir se connecter à un affichage virtuel)
Upstart n'a pas de session X-Windows avec laquelle démarrer Chrome. Upstart et autres systèmes de gestion de services Linux (systemd, sysVinit) ne sont pas conçus pour être utilisés avec des services reposant sur une interface graphique. –
Merci; le fait que j'utilise Pyvirtualdisplay/start Xvfb en tant que processus séparé change-t-il quelque chose? –