ejecutar selenium con crontab (python)

Tengo una secuencia de comandos de Python que llama a Chrome a través de selenium con la siguiente línea.

ff = webdriver.Chrome('/home/user01/webScraping/CollectAndGo/chromedriver') 

El script de Python se llama desde un script de shell.

 python /home/user01/webScraping/CollectAndGo/cgcom.py > /home/user01/webScraping/CollectAndGo/cgcom.log 2>&1 

Cuando ejecuto el script desde la terminal o simplemente ejecutando el archivo .sh, funciona perfectamente, pero cuando programo un trabajo de crontab, falla con el siguiente error.

  raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'unknown error: Chrome failed to start: exited abnormally\n (Driver info: chromedriver=2.9.248304,platform=Linux 3.5.0-36-generic x86_64)' 

El error está relacionado con la primera línea de código de esta pregunta. ¿Alguien sabe por qué esto podría estar pasando?

El problema más evidente al intentar iniciar un navegador desde cron es que incluso si tiene X ejecutándose en su máquina, la variable de entorno DISPLAY no está configurada para los procesos que se ejecutan desde su crontab por lo que el lanzamiento de un navegador desde allí fallará.

Las soluciones van desde lo trivial hasta lo super sofisticado. Una solución trivial sería aceptar que su secuencia de comandos no se ejecutará si no hay una X en ejecución y configurar manualmente la DISPLAY en :0 , que es el número de pantalla predeterminado para el servidor X predeterminado que inicia Ubuntu.

Por ejemplo, si uso este comando en una línea crontab , Chrome se inicia sin problemas:

 DISPLAY=:0 google-chrome 

Es probable que Crontab se ejecute como un usuario que no tiene permiso para acceder al directorio / archivo chromedriver.

Eche un vistazo a las respuestas aquí sobre cómo ejecutar crontab como un usuario específico.

Los controladores web de Selenium necesitan una sesión X para ejecutar el script. Los scripts de Cron normalmente se ejecutan sin una sesión de X. Agrega una sesión X en tu script cron. Me gusta como sigue: * 11 * * * export DISPLAY =: 0; tu script.py