web-dev-qa-db-ja.com

Selenium WebDriverExceptionの修正方法:接続する前にブラウザーが終了したように見えますか?

Selenium Webdriverを使用するために、centos6.4サーバーにfirefoxとXvfbをインストールしました。

しかし、コードを実行するとエラーが発生しました。

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フォルダー内のすべてのファイルを削除することを提案したので、それを行いました。しかし、まだ機能しません。

誰か助けてください。

前もって感謝します!

編集

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' 
60
W3Q

google社員にとっては、この回答は私にとってはうまくいかず、代わりに this answer を使用する必要がありました。 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に感謝

75
Davidjb

Jenkinsとxvfbがインストールされた(ヘッドレス)Ubuntu 14.04サーバーでこれを実行していました。 Selenium(バージョン2.53)用のFirefoxドライバーを使用するpythonスクリプトを実行するビルドの失敗を開始する最新の安定版Firefox(47)をインストールしました。

Firefox 47+はSelenium 2.53で使用されているドライバーと互換性がないようです。Selenium3+は、「Marionette」または「Gecko Driver」と呼ばれる新しいドライバーを使用します(公式にはまだリリースされていません)。

このページでは、新しいドライバーの使用方法をいくつかの言語で説明しています。 https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

基本的に:

  1. githubのプロジェクトから実行可能ファイルを取得/ビルドします。 https://github.com/mozilla/geckodriver/releases (そして、permsが実行可能に設定されていることを確認します、IE chmod a+x /path/to/geckdriver-executable
  2. バイナリの名前変更/コピーを「ワイヤー」に
  3. seleniumテストの実行時にビルドが使用するPATHにバイナリの場所が追加されていることを確認してください
  4. 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)
26
Joel Kleier

私も同じ問題に直面していました。私はFirefox 47とSelenium 2.53を使用していました。 Firefoxを45にダウングレードしました。これでうまくいきました。

  1. 最初にFirefox 47を削除します。

    Sudo apt-get purge firefox
    
  2. 利用可能なバージョンを確認します。

    apt-cache show firefox | grep Version
    

    次のような使用可能なFirefoxバージョンが表示されます。

    バージョン:47.0 + build3-0ubuntu0.16.04.1
    バージョン:45.0.2 + build1-0ubuntu1

  3. 特定のバージョンをインストールする

    Sudo apt-get install firefox=45.0.2+build1-0ubuntu1
    
  4. 次に、新しいバージョンに再度アップグレードしないでください。

    Sudo apt-mark hold firefox
    
  5. 後でアップグレードする場合

    Sudo apt-mark unhold firefox
    Sudo apt-get upgrade
    
22
Amogh Joshi

DISPLAY環境変数を確認してください。コマンドラインでecho $DISPLAYを実行します。

何も印刷されない場合は、DISPLAYが割り当てられていない状態でFireFoxを実行しています。割り当てる必要があります! pythonスクリプトを実行する前に、コマンドラインでexport DISPLAY=:1を実行します。

詳細については、このスレッドを確認してください: http://hashcat.net/forum/thread-1973.html

11
Bilal Naqvi

ここで最も簡単な解決策は、Pythonをxvfb-runで実行するだけだと思います:

Sudo apt-get install xvfb
xvfb-run python <your_file_or_args>
5
Philip Tzou

Firefoxを47バージョンから45バージョンにダウングレードする代わりに、47.0.1以上にアップグレードすることをお勧めします。問題を修正しているようです。

しかし、OSのリポジトリに新しいパッケージがない場合(たとえば、この回答の時点でUbuntu 14.04)、ubuntuzillaプロジェクトのdebsを使用できます。

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後置記号を使用します。それは私にとって問題を売りました

1
valignatev

Firefoxを以前の作業バージョンにロールバックします。 2つのバージョンを戻すことをお勧めします。 Firefoxメンテナンスサービスを無効にします。

私はソリューションに取り組んでいて、Firefox Maintenance ServiceがFirefoxをバックグラウンドで最新のビルドに更新しました。これによりコードが破損し、このエラーが発生していました。

これで修正されました!

みんなありがとう!

1
Jacob George

このエラーは、Xvfbが実行されていないことが原因です。したがって、xvfbを再起動します。

Xvfb :99 -ac

確認してください。これは私のために動作します。

1
Ashok Devatwal

Seleniumを使用してpythonスクリプトだけでなく、スクリプトが実行されているvirtualenv全体に対して再帰的なchownを実行することでこれを修正しました。ファイルを実行しているユーザーの所有権を変更しました。その後、このエラーはなくなりました。

0
melchoir55

私も同じ問題に直面しました、私がしたことは:

  1. Seleniumパッケージをアップグレードする

    Sudo pip install -U Selenium
    
  2. 古いバージョンにロールバックする代わりに(提案されたように)新しいバージョンにロールアップしました(48.0、以前はV47.0を使用していました)。 (アップグレードするには、Toby Speightの指示に従いますが、古いバージョンを選択する代わりに新しいバージョンを選択してください)

0