【问题标题】:Selenium on Python with Geckdriver crashes when not in headless mode不处于无头模式时,带有 Geckodriver 的 Python 上的 Selenium 崩溃
【发布时间】:2020-11-24 20:32:09
【问题描述】:

我正在尝试在带有 geckodriver 的 jupyter 笔记本上使用 Selenium。

虽然在无头模式下它似乎工作正常,但我需要查看浏览器窗口,因为我正在学习......

我检查了浏览器和驱动程序是否兼容,驱动程序已添加到 PATH 变量中,还有一些我在周围看到的提示...

这很好用:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

但是当删除无头选项时,它会崩溃:

WebDriverException:消息:无效参数:无法终止已退出的进程

我可以在 geckodriver.log 中找到的唯一线索:

1596560987355 mozrunner::runner INFO 运行命令:“/bin/firefox”“-marionette”“-foreground”“-no-remote”“-profile”“/tmp/rust_mozprofilejjh45q” 错误:未指定 DISPLAY 环境变量

我检查了该变量是否存在,它类似于 DISPLAY:0。我还尝试更改值,将其设置为我的 ip 和端口....

这让我有点生气,所以如果有人能伸出我的手,那就太棒了! 提前致谢!!

--> 更新:正如@Wunderbread 所建议的,SeleniumBase 可以正常工作。

--> 更新:我在 Jupiter Hub 上工作 Selenium。在 jupyter 树、PyCharm 或 VSC 上都不起作用,但是......从终端上的脚本完美运行......生活有奥秘...... xDD

【问题讨论】:

  • 如果我没记错 head/less 取决于您安装的 geckodriver 的类型 - 您可能需要安装非无头驱动程序,或者在最少指向一个。
  • 嗨!我没有看到任何关于两个不同驱动程序的信息,但我会看看!!谢谢你的时间!
  • 这里有一个 geckodriver:github.com/mozilla/geckodriver/releases 但如果您想节省时间,请使用现有的测试套件。我建议使用 SeleniumBase,它为你做了很多繁琐的工作。在这里查看:github.com/seleniumbase/SeleniumBase
  • @Wunderbread 祝福!!我已经与这个问题作斗争了两天,但你关于 SeleniumBase 的建议在第一次尝试时就奏效了!!太感谢了!!我仍然想知道我的错误是什么,但这对我来说是完美的!

标签: python selenium geckodriver


【解决方案1】:

您似乎正在删除options.headless = True,而驱动程序正在寻找该选项。将无头选项设置为options.headless = False

或者写一些无头成为可选参数的东西,例如:

from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver

options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get("http://google.com")

更新:我建议使用 SeleniumBase,因为它为您提供了有关测试套件设置的基础。

但是,值得注意的是,使用以下代码,我能够在无头和使用浏览器进行测试之间切换。我在 Mac OS 10.15.6 和 Python 3.8 上使用自制软件满足本地 geckodriver 要求

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = False
driver = webdriver.Firefox(options=options)
driver.get("https://google.com/")
driver.quit()

【讨论】:

  • 嗨! thx,但是如果两者都尝试了,它仍然是一样的......作为缺陷,无头值它被设置为 False......这在某种程度上很有趣,因为 Selenium 的每个问题似乎都与无法无头......在我的情况正好相反...
  • 我会确保您使用的是最新的驱动程序二进制文件,如果问题仍然存在,请创建一个 github 票 github.com/mozilla/geckodriver/issues
  • @Pablo Selenium 很有趣 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多