Selenium Geckodriver Firefox不能在CRONTAB中工作,只能在终端上工作



我有一个非常简单的python代码,最近只有在cron中运行时才停止工作。

基本上,它就是这样开始的:

from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.firefox.options import Options
display = Display(visible=0, size=(1000, 1000))
display.start()
url = "https://www.exemple.com/admin"
opts= Options()
opts.headless = True
driver = webdriver.Firefox(options=opts)
driver.get(url)

这引发了一个错误:

selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process

壁虎驱动器日志为:

1586945401577   mozrunner::runner   INFO    Running command: "/usr/bin/firefox" "-marionette" "-headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofileYPmycq"
*** You are running in headless mode.
1586945401858   addons.webextension.doh-rollout@mozilla.org WARN    Loading extension 'doh-rollout@mozilla.org': Reading manifest: Invalid extension permission: networkStatus
1586945401873   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
1586945401873   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
1586945401873   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
1586945401873   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
Exiting due to channel error.
Exiting due to channel error.

壁虎驱动程序版本:0.26Firefox版本:76.0b4Python版本:3.6硒版本:3.14.1

因此,我认为不存在兼容性问题。Gecko对所有用户都是可执行的,位于/usr/bin/中。

我检查了所有信息,在这里找到了WebDriverException:消息:无效参数:can';t在RaspberryPi3 上使用GeckoDriver、Selenium和Python杀死退出的进程

我还试着通过添加DISPLAY:=10从终端单独启动firefox,结果成功了。

脚本在终端上运行良好,但一旦进入CRONTAB,我就会出现上面的错误。

此外,我在运行之前杀死了所有的firefox进程。

我通过显式设置Web驱动程序的路径来解决这个问题。也就是说,我替换了这个:

from selenium import webdriver
driver = webdriver.Firefox()

有了这个:

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'/usr/local/bin/geckodriver')

神奇的是,cronjob运行良好。

最新更新