selenium.common.exceptions.WebDriverException:消息:在 Raspberry-pi3 中尝试通过 GeckoDriver 打开 Firefox 浏览器时连接被拒绝

selenium.common.exceptions.WebDriverException: Message: connection refused while trying to open Firefox browser through GeckoDriver in Raspberry-pi3

嗨,我有一个 raspberry pi 3 并决定尝试获取 selenium 运行 python 3。我使用 "pip3 install selenium" 安装它并且没有错误。在我用这段代码制作了一个小测试脚本之后:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# create a new Firefox session
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()

# Navigate to the application home page
driver.get("http://www.google.com")

# get the search textbox
search_field = driver.find_element_by_id("lst-ib")
search_field.clear()

# enter search keyword and submit
search_field.send_keys("Selenium WebDriver Interview questions")
search_field.submit()

# get the list of elements which are displayed after the search
# currently on result page using find_elements_by_class_name method
lists= driver.find_elements_by_class_name("_Rm")

# get the number of elements found
print ("Found " + str(len(lists)) + " searches:")

# iterate through each element and print the text that is
# name of the search

i=0
for listitem in lists:
   print (listitem.get_attribute("innerHTML"))
   i=i+1
   if(i>10):
      break

# close the browser window
driver.quit()

但它给我一个错误:

Traceback (most recent call last):
  File "/home/pi/SeleniumTest.py", line 5, in <module>
    driver = webdriver.Firefox()
  File "/home/pi/.local/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in __init__
    keep_alive=True)
  File "/home/pi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/pi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 245, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/pi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "/home/pi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

感谢任何帮助,谢谢:)

您需要安装 geckodriver,这是一项要求,我不知道 apt 是否提供,但如果没有,您可以从 GitHub [=13] 的官方发布页面下载 armv7hf 版本=]

如果需要手动安装,将可执行文件geckodriver解压到路径中的目录,通常是/usr/local/bin或'$HOME/bin`

编辑: 另一个可能的原因是 运行通过 SSH 使用 selenium,在这种情况下你的 RPi 将没有显示器来连接 firefox window 并且它会崩溃,要解决这个你需要 运行 Firefox 在无头模式下是这样的:

# create a new Firefox session
opt = webdriver.FirefoxOptions()
opt.set_headless()
driver = webdriver.Firefox(options=opt)
# here instead of maximize you have to set a custom size
driver.set_window_size(1920, 1080)

这个错误信息...

selenium.common.exceptions.WebDriverException: Message: connection refused

...意味着 GeckoDriver 无法 initiate/spawn 新的 Web Client session/instance 成功.

您使用的二进制文件的版本信息可能让我们对您观察到的错误有了更多的了解。

但是您可能需要传递 Key executable_path 以及 Value 在初始化 WebDriverWebBrowser 时引用 GeckoDriver 的绝对路径作为参数如下:

from selenium import webdriver

# create a new Firefox session
driver = webdriver.Firefox(executable_path=r'/path/to/geckodriver')

其他建议

  • Selenium 升级到当前水平 Version 3.11.0
  • GeckoDriver 升级到 GeckoDriver v0.20.1 级别。
  • 确保 GeckoDriver 存在于参数 executable_path.
  • 中提到的指定位置
  • 确保 GeckoDriver 具有非根用户的可执行权限。
  • Firefox 版本升级到 Firefox v59.0.2 级别。
  • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
  • 使用 CCleaner 工具清除执行 测试套件 .
  • 前后的所有 OS 琐事
  • 如果您的基础 Web 客户端 版本太旧,则通过 Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web 客户端.
  • 系统重启
  • 以非 root 用户身份执行 Test
  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例.