我有一个python脚本,下一行通过selenium调用chrome。
ff = webdriver.Chrome('/home/user01/webScraping/CollectAndGo/chromedriver')
python脚本是从shell脚本调用的。
python /home/user01/webScraping/CollectAndGo/cgcom.py > /home/user01/webScraping/CollectAndGo/cgcom.log 2>&1
当我从终端运行脚本或只是执行.sh文件时,它工作得很好,但是当我调度crontab作业时,它会失败,并出现下一个错误。
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)'
错误与此问题的第一行代码有关。有人知道为什么会这样吗?
尝试从
cron
启动浏览器时最明显的问题是,即使您的计算机上运行有X,也不会为从crontab
运行的进程设置DISPLAY
环境变量,因此从那里启动浏览器将失败。解决方案从琐碎到复杂。一个简单的解决方案是接受如果没有X运行,脚本将不会运行,并手动将
DISPLAY
设置为:0
,这是Ubuntu启动的默认X服务器的默认显示号。例如,如果我将这个命令放在
crontab
行的command
列中,Chrome将在没有问题的情况下启动:特定于用户的crontab文件中的完整行如下:
如果您想运行一个python脚本,该脚本通过selenium启动chrome,那么这行代码应该如下所示:
命令字符串就像发送给shell一样发送,因此在上一个示例中,字符串
DISPLAY=:0 python my_script.py
将直接传递给shell。通常的shell语法是将命令开始时立即给定的变量赋值解释为设置环境变量。(当然是dash
和bash
的情况,其中一个可能是大多数安装中的默认shell。)因此shell解释的命令将环境变量DISPLAY
设置为值:0
,然后运行python my_script.py
。由于python
从启动它的shell继承了它的环境,因此变量DISPLAY
对它也是:0
。设置
DISPLAY=:0
就像我在上面显示的那样,只为下面的命令设置变量。对于crontab执行的所有命令,也可以将DISPLAY
设置为:0
。例如,在以下特定于用户的crontab中:行
DISPLAY=:0
为执行google-chrome
和python my_script.py
设置环境变量DISPLAY
Crontab可能是作为一个没有权限访问chromedriver目录/文件的用户运行的。
看看answers here如何以特定用户的身份运行crontab。
selenium web驱动程序需要X会话来运行脚本。Cron脚本通常在没有X会话的情况下运行。在cron脚本中添加X会话。如下所示: *11***导出显示=:0;您的script.py
相关问题 更多 >
编程相关推荐