Selenium.common.exceptions.WebDriverException: Сообщение: соединение отказано

Вот мой код:

from selenium import webdriver

browser = webdriver.Firefox()

browser.get('http://www.python.org')

browser.close()

Он запустил браузер Firefox, когда я запустил этот script, но страница пуста, затем в командной строке отображается сообщение об ошибке:

Traceback (most recent call last):
  File "ad.py", line 3, in <module>
    browser = webdriver.Firefox()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 76, in __init__
    keep_alive=True)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 92, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 179, in start_session
    response = self.execute(Command.NEW_SESSION, capabilities)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

Мой python vesion равен 2.7.3, а версия селена - selenium-3.0.0.b3.egg-info

Пожалуйста, как мне решить проблему...

Ответ 1

Проверьте файл geckodriver.log (должен находиться в том же каталоге, что и файл python)

Если он говорит Error: GDK_BACKEND does not match available displays, то установите pyvirtualdisplay:

pip install pyvirtualdisplay selenium

Вам может понадобиться также xvfb:

sudo apt-get install xvfb # Debian

sudo yum install Xvfb # Fedora

Затем попробуйте добавить этот код:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()

Полный пример:

from pyvirtualdisplay import Display
from selenium import webdriver

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

browser = webdriver.Firefox()
browser.get('http://www.python.org')

browser.close()

Ответ 2

Как упомянуто @kervvv, эта проблема, вероятно, связана с более старой версией Firefox, чем geckodriver или geckodriver selenium и/или geckodriver. Насколько я могу судить, следует отметить, что конкретное сообщение об ошибке из селена является несколько общим или расплывчатым; таким образом, это не показывает явно, почему происходит ошибка.

В случае, если пользователи обращаются за помощью при использовании более старой версии Firefox, включая Extended Support Release (ESR), следующее решение должно работать нормально.

  1. Посетите страницу загрузки Firefox, чтобы загрузить бета-версию, версию Nightly или версию Firefox для разработчиков.
  2. Извлеките пакет в произвольное место в вашей файловой системе (где угодно)
  3. Укажите FirefoxBinary в вашем коде или скрипте, чтобы указать на загруженное местоположение.

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    binary = FirefoxBinary('/home/username/firefox/firefox')
    driver = webdriver.Firefox(firefox_binary=binary)
    driver.get(url)
    

Это работает для меня в Gentoo, например, где версия geckodriver (0.20.0) и selenium (3.11.0) являются последней доступной версией, в то время как Firefox (ESR) - в версии 52.

Ответ 3

Была и эта проблема. Необходимо установить DISPLAY. Для меня буфер кадров Xvfb запущен на локальном компьютере по адресу: 99.

$ export DISPLAY=:99

Ответ 4

Была та же проблема. Думал, что это был прокси или порт (безрезультатно), но то, что решило мою проблему, просто обновило Firefox. Я запускал 52.0.xxx и обновлялся до 57.0.2. Ссылка здесь.

Ответ 5

Это может быть по разным причинам.

  • Скорее всего, потому что "последняя" версия вашего geckodriver не может общаться с вашим "немного старше" firefox.

  • Самый простой способ исправить это - попробовать разные старые версии geckodriver. Запустите следующую команду, чтобы найти текущую версию вашего geckodriver

    geckodriver --version
    
  • Если он показывает версию как 19 или выше, выполните следующие шаги, чтобы использовать версию 17 geckodriver (работает 90% раз)

    1. Ваш существующий geckodriver чаще всего может быть помещен в /usr/local/bin когда вы установили его ранее. Сначала удалите это, запустив sudo rm -r/usr/local/bin/geckodriver

    2. Загрузите версию 17 geckodriver по этой ссылке. Переместите загруженный файл (geckodriver-v0.17.0-arm7hf.tar.gz) из папки " Downloads " в home каталог.

    3. Распакуйте файл

      tar -xzvf geckodriver-v0.17.0-arm7hf.tar.gz
      

      Это создаст папку с именем "geckodriver" в вашем домашнем каталоге

    4. Переместите/скопируйте этот извлеченный "geckodriver" в /usr/local/bin/

      sudo cp geckodriver /usr/local/bin/
      
    5. Бежать

      sudo reboot
      

Перезапустите вашу программу сейчас...
Он должен работать!

Ответ 6

Первое, что нужно сделать: обновить Firefox и убедиться, что у вас установлена последняя версия geckodriver (https://github.com/mozilla/geckodriver/releases)