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), следующее решение должно работать нормально.
- Посетите страницу загрузки Firefox, чтобы загрузить бета-версию, версию Nightly или версию Firefox для разработчиков.
- Извлеките пакет в произвольное место в вашей файловой системе (где угодно)
-
Укажите 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% раз)
-
-
Ваш существующий geckodriver чаще всего может быть помещен в /usr/local/bin
когда вы установили его ранее. Сначала удалите это, запустив sudo rm -r/usr/local/bin/geckodriver
-
Загрузите версию 17 geckodriver по этой ссылке. Переместите загруженный файл (geckodriver-v0.17.0-arm7hf.tar.gz
) из папки " Downloads
" в home
каталог.
-
Распакуйте файл
tar -xzvf geckodriver-v0.17.0-arm7hf.tar.gz
Это создаст папку с именем "geckodriver" в вашем домашнем каталоге
-
Переместите/скопируйте этот извлеченный "geckodriver" в /usr/local/bin/
sudo cp geckodriver /usr/local/bin/
-
Бежать
sudo reboot
Перезапустите вашу программу сейчас...
Он должен работать!
Ответ 6
Первое, что нужно сделать: обновить Firefox и убедиться, что у вас установлена последняя версия geckodriver (https://github.com/mozilla/geckodriver/releases)