我有一个 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,DISPLAY
环境变量也没有为进程设置从您的 crontab
运行,因此从那里启动浏览器将失败。
解决方案范围从琐碎到 super 复杂。一个简单的解决方案是接受如果没有 X 运行则您的脚本将不会运行并手动将 DISPLAY
设置为 :0
,这是Ubuntu 启动的默认 X 服务器。
例如,如果我将此命令放在 crontab
行的 command
列中,Chrome 会正常启动:
DISPLAY=:0 google-chrome
用户特定的 crontab 文件中的完整行类似于:
0 * * * * DISPLAY=:0 google-chrome
如果你想运行一个通过 selenium 启动 chrome 的 python 脚本,该行将如下所示:
0 * * * * DISPLAY=:0 python my_script.py
命令字符串按原样发送到 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
为后面的命令设置变量 only 。对于 crontab 执行的所有命令,也可以将 DISPLAY
设置为 :0
。例如在以下用户特定的 crontab 中:
DISPLAY=:0
30 * * * * google-chrome
0 * * * * python my_script.py
行 DISPLAY=:0
设置环境变量 DISPLAY
以执行 google-chrome
和 python my_script。 py
关于python - 使用 crontab (python) 运行 selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908319/