Pytanie Jak naprawić Selenium WebDriverException: Wygląda na to, że przeglądarka zakończyła pracę, zanim mogliśmy się połączyć?


Zainstalowałem firefox i Xvfb na moim serwerze centos6.4, aby używać selionowego webdrivera.

Ale kiedy uruchomiłem kod, otrzymałem błąd.

from selenium import webdriver
browser = webdriver.Firefox()

Błąd

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

Czytałem kilka powiązanych stron na stackoverflow i ktoś zaproponował, aby usunąć wszystkie pliki w folderze tmp, więc zrobiłem to. Ale nadal nie działa.

Czy ktoś mógłby mi pomóc?

Z góry dziękuję!

Edytować

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' 

53
2017-09-27 02:55


pochodzenie


Których wersji selenu i firefox używasz? Dzięki. - alecxe
Dziękuję za Twój komentarz! Mozilla Firefox 31.1.0. - W3Q
Zainstalowałem selen za pomocą polecenia pip. Jest to "Wersja: 2.43.0" - W3Q
Jedna opcja: możesz wydrukować pip freeze i zobacz, co tam jest selenium. - alecxe
A co, jeśli spróbujesz chrome? browser = webdriver.Chrome()? - alecxe


Odpowiedzi:


dla pracowników Google ta odpowiedź nie działa dla mnie i musiałem jej użyć ta odpowiedź zamiast. Używam AWS Ubuntu.

Zasadniczo potrzebowałem zainstalować Xvfb, a następnie pyvirtualdisplay:

sudo apt-get install xvfb
sudo pip install pyvirtualdisplay

Kiedy już to zrobiłem, ten kod Pythona zadziałał:

#!/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()

Dzięki @ That1Guy za pierwszą odpowiedź


67
2018-05-07 14:24





Pracowałem nad tym na (bezgłowym) serwerze Ubuntu 14.04 z zainstalowanymi Jenkins i xvfb. Zainstalowałem najnowszy stabilny Firefox (47), który rozpoczął awarię kompilacji, która uruchomiła skrypt Pythona, który użył sterownika Firefox dla selenu (wersja 2.53).

Wygląda na to, że Firefox 47+ nie jest zgodny ze sterownikiem używanym w Selenium 2.53, a Selenium 3+ będzie używał nowego sterownika o nazwie "Marionetka" lub "Gecko Driver" (który nie jest jeszcze oficjalnie wydany).

Ta strona wyjaśnia, jak całkiem dobrze używać nowego sterownika w kilku językach: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

Gruntownie:

  1. pobierz / skompiluj plik wykonywalny z projektu na github: https://github.com/mozilla/geckodriver/releases (i upewnij się, że perms są ustawione na wykonywalne, IE chmod a+x /path/to/geckdriver-executable)
  2. zmień nazwę / kopię binarną na "przewody"
  3. upewnij się, że lokalizacja binarna jest dodana do PATH, której używa kompilacja podczas wykonywania testu selenu
  4. zaktualizuj test selenu, aby użyć nowego sterownika

W przypadku Pythona krok 4 wyglądał dla mnie następująco:

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)

25
2018-06-11 04:53



Jeśli to działało w przeszłości, a po aktualizacji Firefoksa otrzymujesz teraz "WebDriverException: Wiadomość: Wygląda na to, że przeglądarka zakończyła pracę, zanim mogliśmy się połączyć.", To prawdopodobnie jest wyjaśnienie. - medmunds
Oto więcej informacji: github.com/SeleniumHQ/selenium/issues/.... Alternatywy przejścia na Marionetkę teraz powracają do FF 46 lub czekają, aż Mozilla wyda poprawkę FF 47, która to naprawi. - medmunds
W kroku 3 umieściłem plik na: /usr/local/bin/wires. Dzięki! - Caumons
Błąd został naprawiony w FF 47.0.1 - seb
Aktualizacja: wygląda na to, że FF48 ponownie stwarza problemy; ani oryginalna wersja webdriver.Firefox, ani wersja z marionetką nie działa (drugi z nich zwrócił "WebDriverException: Service wires nieoczekiwanie zakończył kod statusu: 1") - Ando Jurai


Ja też stanąłem w obliczu tego samego problemu. Byłem w Firefoksie 47 i Selenium 2.53; Zmieniono Firefoksa na 45. To zadziałało.

  1. Najpierw usuń Firefoksa 47:

    sudo apt-get purge firefox
    
  2. Sprawdź dostępne wersje:

    apt-cache show firefox | grep Version
    

    Pokaże dostępne wersje firefox takie jak:

    Wersja: 47.0 + build3-0ubuntu0.16.04.1
      Wersja: 45.0.2 + build1-0ubuntu1

  3. Zainstaluj konkretną wersję

    sudo apt-get install firefox=45.0.2+build1-0ubuntu1
    
  4. Następnie nie należy ponownie aktualizować do nowszej wersji.

    sudo apt-mark hold firefox
    
  5. Jeśli chcesz uaktualnić później

    sudo apt-mark unhold firefox
    sudo apt-get upgrade
    

22
2017-07-09 09:28



Dzięki za ten obejście milion. Utknąłem z tym problemem przez jakiś czas. - sudhishkr
@sudhishkr Znam frustrację ... Cieszę się, że rozwiązanie pomogło. - Amogh Joshi
@AmoghJoshi jest to problem z selenem lub Firefoksem? Czy zostało to zarejestrowane jako błąd? - user_3068807
@Shafaq To prawda, że ​​jest to problem z Selenium. Zostało to zarejestrowane jako błąd. Oto link do zmiany logu: raw.githubusercontent.com/SeleniumHQ/selenium/master/py/CHANGES. Widać, że próbowali rozwiązać problemy ze zgodnością ze sterownikiem FireFox. - Amogh Joshi
Dzięki, bardzo mi się przydaje - Duy Trần


Sprawdź swój DISPLAY Zmienna środowiskowa. Biegać echo $DISPLAY w linii poleceń.

Jeśli nic nie jest drukowane, to uruchamiasz FireFox bez przypisanego DISPLAY. Powinieneś przypisać jedną! Biegać export DISPLAY=:1 w linii poleceń przed uruchomieniem skryptu Pythona.

Sprawdź ten wątek, aby uzyskać więcej informacji: http://hashcat.net/forum/thread-1973.html


11
2018-01-14 07:32



Pomocna wskazówka: Jeśli używasz Ubuntu 14.04 w trybie bezgłośnym, prawdopodobnie chcesz export DISPLAY=:99. To właśnie dla mnie zadziałało. - steve-gregory
Zrobiono to za pomocą wtyczki Jenkins Xvfb: jego domyślne zestawy konfiguracyjne DISPLAY=:0, który jest nieprawidłowy. Konieczne jest przesłonięcie w konfiguracji zadania> środowisku kompilacji> Zaawansowane xvfb: "Przesunięcie nazwy wyświetlanej Xvfb". Łatwe do wyśledzenia dzięki echo $DISPLAY w twoim skrypcie budowania. - medmunds


Myślę, że najprostszym rozwiązaniem jest uruchomienie Pythona xvfb-run:

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

5
2018-01-07 08:23



Czy możesz podać szybkie wyjaśnienie, co działa python przez xvfb-run? Strona podręcznika nie jest zbyt pomocna - YPCrumble
@ YPCrumble xvfb nie ma nic wspólnego z wykonywanym wewnątrz plikiem wykonywalnym. Problem dotyczy wersji selenowej lub używanego z nią firefoxu. Najlepszym sposobem rozwiązania tego typu problemów jest dołączenie kopii skryptu firefox do skryptu zamiast uruchamiania skryptu w środowisku, którego nie kontrolujesz / nie znasz. - erm3nda
@YPCrumble na twoje pytanie, xvfb-run jest takie samo, jak nici do xvfb, ale w odwrotny sposób. - erm3nda


Przywróć Firefoksa do poprzedniej działającej wersji. Proponuję 2 wersje z powrotem. Wyłącz usługę konserwacji Firefoksa.

Pracowałem nad rozwiązaniem, a Firefox Maintenance Service zaktualizował Firefoksa do najnowszej wersji w tle. To zepsuło mój kod i dało mi ten błąd.

Teraz jest naprawiony!

Dziękuje wszystkim!


1
2018-06-13 18:28





Ten błąd wynika z tego, że Twój Xvfb nie działa. Więc uruchom ponownie twój xvfb:

Xvfb :99 -ac

następnie sprawdź. To działa dla mnie.


1
2017-07-14 06:44





Zamiast obniżać poziom firefox z wersji 47 na 45 lub coś, co proponuję uaktualnić do 47.0.1 lub powyżej, ponieważ wydają się rozwiązywać problem.

Ale jeśli twój system operacyjny nie ma nowych pakietów w repozytorium (na przykład Ubuntu 14.04 w czasie tej odpowiedzi), możesz użyć deb z projektu 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

Do użytku z x86 _i386.deb Postfiks. Ten sprzedany problem dla mnie


1
2017-07-22 06:50





Naprawiłem to, uruchamiając rekurencyjną chown przeciwko nie tylko skryptowi Pythona używającym selenu, ale przeciwko całemu virtualenv, w którym skrypt był uruchomiony. Zmieniłem prawo własności do użytkownika, który uruchomił plik. Potem ten błąd zniknął.


0
2017-11-18 07:50