Как исправить Selenium WebDriverException: браузер, кажется, вышел, прежде чем мы могли подключиться? - программирование
Подтвердить что ты не робот

Как исправить Selenium WebDriverException: браузер, кажется, вышел, прежде чем мы могли подключиться?

Я установил firefox и Xvfb на свой сервер centos6.4 для использования веб-сервера selenium.

Но, когда я запускаю код, у меня есть ошибка.

from selenium import webdriver
browser = webdriver.Firefox()

Ошибка

selenium.common.exceptions.WebDriverException: Message: 
'The browser appears to have exited before we could connect. The output was: None'

Я прочитал некоторые связанные страницы в stackoverflow, и кто-то предложил удалить все файлы в папку tmp, поэтому я сделал это. Но это все еще не работает.

Может кто-нибудь, пожалуйста, помогите мне?

Заранее благодарю вас!

Edit

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__
    self.binary, timeout),
  File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
    self.binary.launch_browser(self.profile)
  File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 64, in launch_browser
    self._wait_until_connectable()
  File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
    self._get_firefox_output())
selenium.common.exceptions.WebDriverException: Message: 'The browser appears to have exited     before we could connect. The output was: None' 
4b9b3361

Ответ 1

для гуглеров, этот ответ не сработал у меня, и вместо этого мне пришлось использовать этот ответ. Я использую AWS Ubuntu.

В принципе, мне нужно было установить Xvfb, а затем pyvirtualdisplay:

sudo apt-get install xvfb
sudo pip install pyvirtualdisplay

Как только я это сделал, этот код python работал:

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

browser = webdriver.Firefox()
browser.get('http://www.ubuntu.com/')
print browser.page_source

browser.close()
display.stop()

Спасибо @That1Guy за первый ответ

Ответ 2

Я столкнулся с этим на (безголовом) сервере Ubuntu 14.04 с установленными Jenkins и xvfb. Я установил последний стабильный Firefox (47), который начал сбой сборки, на котором был запущен python script, который использовал драйвер Firefox для селена (версия 2.53).

По-видимому, Firefox 47+ несовместим с драйвером, используемым в Selenium 2.53, и Selenium 3+ будет использовать новый драйвер под названием "Marionette" или "Gecko Driver" (который еще официально не выпущен).

На этой странице объясняется, как правильно использовать новый драйвер на нескольких языках: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

В принципе:

  • получить/создать исполняемый файл из проекта на github: https://github.com/mozilla/geckodriver/releases (и убедиться, что perms установлены как исполняемые, IE chmod a+x /path/to/geckdriver-executable)
  • переименовать/скопировать двоичный код на "проводы"
  • убедитесь, что бинарное местоположение добавлено в PATH, которое использует сборка при выполнении теста selenium
  • обновите тест селена, чтобы использовать новый драйвер

Для Python шаг 4 выглядел примерно так:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'

driver = webdriver.Firefox(capabilities=firefox_capabilities)

Ответ 3

У меня тоже была такая же проблема. Я был на Firefox 47 и Selenium 2.53; Я понизил Firefox до 45. Это сработало.

  • Сначала удалите Firefox 47:

    sudo apt-get purge firefox
    
  • Проверьте доступные версии:

    apt-cache show firefox | grep Version
    

    Он покажет доступные версии firefox, например:

    Версия: 47.0 + build3-0ubuntu0.16.04.1
    Версия: 45.0.2 + build1-0ubuntu1

  • Установите определенную версию

    sudo apt-get install firefox=45.0.2+build1-0ubuntu1
    
  • Затем вам не нужно снова обновляться до новой версии.

    sudo apt-mark hold firefox
    
  • Если вы хотите позже обновить

    sudo apt-mark unhold firefox
    sudo apt-get upgrade
    

Ответ 4

Проверьте переменную среды DISPLAY. Запустите echo $DISPLAY в командной строке.

Если ничего не напечатано, вы запускаете FireFox без какого-либо DISPLAY. Вы должны назначить его! Запустите export DISPLAY=:1 в командной строке перед запуском вашего python script.

Посмотрите эту тему для получения дополнительной информации: http://hashcat.net/forum/thread-1973.html

Ответ 5

Я думаю, что самое простое решение здесь - это просто запустить Python с xvfb-run:

sudo apt-get install xvfb
xvfb-run python <your_file_or_args>

Ответ 6

Откажитесь от Firefox до предыдущей рабочей версии. Я предлагаю 2 версии. Отключить службу технического обслуживания Firefox.

Я работал над решением, и Служба поддержки Firefox обновила Firefox до последней сборки в фоновом режиме. Это нарушило мой код, и это дало мне эту ошибку.

Теперь он исправлен!

Спасибо всем!

Ответ 7

Эта ошибка связана с тем, что ваш Xvfb не запущен. Перезагрузите xvfb:

Xvfb :99 -ac

затем проверьте. Это работает для меня.

Ответ 8

Вместо того, чтобы понижать рейтинг firefox от 47 до 45 или что-то, я предлагаю обновить до 47.0.1 или выше, поскольку они, похоже, исправляют проблему.

Но если ваша ОС не имеет новых пакетов в репо (например, Ubuntu 14.04 во время этого ответа), вы можете использовать debs из проекта ubuntuzilla:

wget sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_47.0.1-0ubuntu1_amd64.deb

sudo dpkg -i firefox-mozilla-build_47.0.1-0ubuntu1_amd64.deb

Для x86 используйте _i386.deb postfix. Эта проданная проблема для меня

Ответ 9

Я исправил это, запустив рекурсивный chown против не только python script, используя селен, но и против всего virtualenv, с которым работал script. Я изменил право собственности на пользователя, запускающего файл. После этого эта ошибка исчезла.

Ответ 10

Я также столкнулся с той же проблемой, что и я:

  • Обновление пакета селена

    sudo pip install -U selenium
    
  • Вместо того, чтобы возвращаться к более старой версии (например, предложено), я свернул на новую версию (48.0, ранее я использовал V47.0). (для обновления следуйте инструкциям Тоби Спейта, но вместо того, чтобы выбрать более старую версию, выберите более новую версию)

Ответ 11

обновите свою версию selenuim --- > pip install -U selenium

Ответ 12

Это можно решить, изменив разрешение файла выходного файла (или связанных файлов с программой).
Я использовал Firefox webdriver.

Try:

chmod -R 777 output_file

Это разрешило мне ту же самую проблему, что и у вас.