我有一个非常简单的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运行良好。