当前位置: 首页 > 面试题库 >

用crontab运行selenium(python)

段干高歌
2023-03-14
问题内容

我有一个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因此从那里启动浏览器将失败。

解决方案的范围从琐碎的到非常复杂的。一个简单的解决方案是,如果没有X运行并且将其手动设置DISPLAY:0,则脚本将不会运行,并且将其手动设置为Ubuntu启动的默认X服务器的默认显示号。

例如,如果我将此命令放在一行的command列中crontab,Chrome会启动而不会出现问题:

DISPLAY=:0 google-chrome

用户特定的crontab文件中的完整行如下所示:

0 * * * *  DISPLAY=:0 google-chrome

如果您要运行一个通过selenium启动chrome的python脚本,则该行应如下所示:

0 * * * *  DISPLAY=:0 python my_script.py

命令字符串只是按原样发送到外壳,因此在上一个示例中,该字符串DISPLAY=:0 python my_script.py仅会传递到外壳。通常的shell语法是将命令开始时立即给出的变量分配解释为设置环境变量。(dashand
肯定是这种情况,bash在大多数安装中,其中之一可能是默认的shell。)因此,shell解释的命令将环境变量DISPLAY设置为value
:0,然后运行python my_script.py。由于python从启动它的外壳程序继承了它的环境,因此变量DISPLAY:0适用于它。

设置DISPLAY=:0像我看到前面设置变量
为下面的命令。也可以设置DISPLAY:0由crontab中执行的所有命令。例如,在以下特定于用户的crontab中:

DISPLAY=:0

30 * * * *  google-chrome
0  * * * *  python my_script.py

该行DISPLAY=:0设置了DISPLAY用于执行google-chrome和的环境变量python my_script.py



 类似资料:
  • 我有一个python脚本,在下一行中通过selenium调用chrome。 python脚本是从shell脚本调用的。 当我从终端运行脚本或只是执行时。sh文件它工作得很好,但当我计划crontab作业时,它会失败,并出现下一个错误。 错误与此问题的第一行代码有关。有人知道为什么会这样吗?

  • 问题内容: 我想让cron作业使用一个已经存在的名为my_env的anaconda python环境执行python脚本。我唯一想做的是让cron作业运行一个名为的脚本,该脚本又会激活env,然后运行python脚本。 尝试从命令行执行此脚本不起作用: 我需要做什么以确保激活正确的环境。可以像我5岁时向我解释一下。 问题答案: 不要打电话,但是。是bash命令。 要不就 因为您添加了bash sh

  • 我试图让一个Python脚本使用crontab每小时运行一次,但我似乎无法让它工作。 如果我从终端手动运行Python程序,它运行良好并完成。 我的crontab设置如下: 让我澄清一下,我遵循了这篇类似文章的建议。我尝试了创建输出文件的简单测试脚本并成功了。但是在具有相同设置的相同crontab下,我的程序无法完成。 有趣的是,在脚本即将启动时使用TOP,Python窗口会在再次消失之前短暂弹出

  • 问题内容: 我正在尝试按计划运行php- script。所以我认为crontab是个好主意。我正在使用的服务器在我不太熟悉的Linux上。所以我遇到的问题是,我不知道如何从php使脚本可执行。我需要引用该脚本,或将其放入可以从命令行运行php的文件夹中。所以我不知道给我的crontab提供什么路径,例如: 我发现有关此php可执行文件的一些模糊信息 但是我在那里找不到任何php文件,也许我没有安装

  • 我正在用开放的jdk和crontab运行Ubuntu10.10。我制作了一个整洁的小Java应用程序,它做了一些很酷的东西,并将其导出为一个可运行的jar文件。我可以从命令行运行它,但是我需要一些每天运行一次的东西。所以我在一个cron作业中编写了一个shell脚本,该脚本将实际调用jar文件。shell脚本在单独运行时工作正常,它看起来如下所示: 工作完美。因此,我在crontab中添加了以下内

  • 问题内容: 我已经阅读了多篇文章和许多文章,详细介绍了cron作业中的脚本需要保留由于cron中shell的打开而在脚本本身内部运行所需的环境变量。我的情况是独特的,因为我的路径变量都是按照所讨论的那样设置的,这反过来将使用subprocess.call ()成功调用pysaunter python egg ,但是它似乎从那里分解了。这导致整个过程中断了cron作业。 为了清楚起见,以下是我引用的