【问题标题】:unable to run a python script having selenium library in a crontab无法在 crontab 中运行具有 selenium 库的 python 脚本
【发布时间】:2020-11-19 02:46:29
【问题描述】:

我一直在努力解决这个问题,但直到现在都找不到任何帮助, 我正在尝试使用 crontab 运行一个包含 selenium chrome 驱动程序的 python 脚本, 但我收到错误没有名为 selenium 的模块。 虽然它在笔记本中,但我已经下载了 .py 扩展文件并编写了玉米作业:

crontab 中使用的命令:

CHROMEDRIVER_PATH='/Users/hiteshnettam/Downloads/chromedriver'
*/3 * * * * cd /Users/hiteshnettam/Downloads && /usr/bin/python selenium_test.py

下面写的是要在crontab上运行的脚本

import selenium
from selenium import webdriver
from selenium.webdriver import ActionChains
import datetime


browser1=webdriver.Chrome('/Users/hiteshnettam/Downloads/chromedriver')
browser1.get("http://www.madhavihospital.com")

element=browser1.find_element_by_xpath("/html/body/div/center[3]/a/button")
element.click()
terms = browser1.find_element_by_xpath("//*[@id='name']/form/input[4]")
terms.click()
book=browser1.find_element_by_xpath("//*[@id='name']/form/input[5]")
book.click()
name=browser1.find_element_by_xpath("//*[@id='firstname']")
name.send_keys('Venkat Naidu')
mobile=browser1.find_element_by_xpath("//*[@id='name']/form/input[5]")
mobile.send_keys('8790121620')
Age=browser1.find_element_by_xpath("//*[@id='name']/form/input[6]")
Age.send_keys('75')
gender=browser1.find_element_by_xpath("//*[@id='name']/form/h5[4]/input[2]")
gender.click()

我得到的错误是:运行 cronjob 时没有名为 selenium 的模块

【问题讨论】:

  • 代码不要附图片,请以可重现的形式添加代码。
  • 我已经用可复制形式的代码编辑了我的问题,看看你现在能不能帮助我。

标签: python selenium web-scraping cron


【解决方案1】:

我和你的情况完全一样,在 crontab 上打开 selenium GUI 脚本和从 Jupyter Notebook 到终端找到正确的解释器的综合挑战。请在下面找到我的步骤。

  1. 从 Jupyter 下载 .py 文件(正如您已经完成的那样)

  2. 我已经通过 Anaconda 下载了 Jupyter,所以每当我安装 Python 模块时,它并没有安装到默认的 /usr/bin/python3,而是转到了不同的可执行文件。在 Jupyter Notebook 中,运行以下命令:

import sys
sys.executable()

我的输出如下所示:/Users/myusername/anaconda3/bin/python3.7

这是您需要用来代替 /usr/bin/python3 的输出

  1. 使用 crontab 脚本,您需要使其无头。幸运的是,使用 Chrome 非常容易。请在脚本开头插入代码。
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless") 
browser1=webdriver.Chrome('/Users/hiteshnettam/Downloads/chromedriver', options=chrome_options)
  1. 您已经完成了一半,您的脚本是无头的,但对于 crontab 来说还不够好。要让系统知道您确实不需要 GUI 来运行脚本,您需要修改 crontab 脚本中的一个变量:DISPLAY=:0。这不在您的 Python 脚本中,而是在您的 crontab 脚本中。我会在最后演示。这些都不会真正影响功能,程序将运行完全相同。这样做的好处是您不必登录即可运行脚本。

  2. 现在我们可以将所有信息放在一起。请注意我如何不将cd 放入目录,而是通过绝对文件路径引用文件,这样更简洁,是首选方法。

您的 crontab 应该如下所示,但请将 sys.executable 替换为您自己的输出。

*/3 * * * * DISPLAY=:0 /Users/myusername/anaconda3/bin/python3.7 /Users/hiteshnettam/Downloads/selenium_test.py

【讨论】:

  • 回读我的回答,我意识到您只询问了未安装的 selenium 模块,因此您需要使用 sys.executable 并替换 /usr/bin/python3。我强烈建议您也遵循我的其余答案。我把剩下的留给其他有类似问题的人。
  • 非常感谢,Rohan 成功了!一个星期以来,我一直试图弄清楚这一点。很高兴有一个互相帮助的社区。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2016-06-18
  • 2019-02-17
  • 1970-01-01
  • 2015-10-05
  • 2017-12-16
相关资源
最近更新 更多