Не удается запустить селен-вебдрайвер под Raspbian с использованием Python и geckodriver - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь запустить селен в режиме без головы на Raspberry Pi. Мои сценарии прекрасно работают на моей машине с Windows, но я просто не могу заставить эту конкретную комбинацию работать:

  • Raspbian GNU / Linux 9 (растяжка)
  • Python 3.7.3
  • geckodriver 0.23.0 (2018-10-04)
  • Селен-сервер автономный-3.141.59
  • Mozilla Firefox 52.9.0

сначала я запускаю selenium-server-standalone, как описано в документации :

$ java -jar selenium-server-standalone-3.141.59.jar &
[1] 1842
14:39:26.881 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
14:39:27.321 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444
2019-06-30 14:39:27.589:INFO::main: Logging initialized @2114ms to org.seleniumhq.jetty9.util.log.StdErrLog
14:39:28.755 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
14:39:29.174 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444

Затем я запускаю следующий тестовый скрипт на Python:

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

display = Display(visible=0, size=(800, 800))
display.start()

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

И я получаю следующее сообщение об ошибке:

Traceback (most recent call last):
  File "debug3.py", line 10, in <module>
    driver = webdriver.Firefox(options=options)
  File "/usr/local/opt/python37/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/usr/local/opt/python37/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/opt/python37/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/opt/python37/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/opt/python37/lib/python3.7/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

Согласно этой теме, я включил pyvirtualdisplay. Но нет большой разницы в результате. Также код в этом потоке не работает.

1 Ответ

0 голосов
/ 01 июля 2019

Я идентифицировал проблему, которая была комбинацией трех ошибок:

  1. Нет необходимости запускать selenium-server-standalone
  2. Я не использовал правильную версию geckodriver, raspbian не имеет отношения к самой последней сборке Firefox / Iceweasel. Правильная версия для Mozilla 52 - geckodriver 0.17. Список совместимых версий - здесь , а выпуски geckodriver здесь .
  3. Сценарий python выполнялся слишком быстро для xvfb, он запускал взаимодействия, не дожидаясь визуализации кадра. Также я установил другие рекомендуемые зависимости для pyvirtualdisplay (через sudo apt-get install xvfb xserver-xephyr vnc4server, см. Также здесь )
...