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'
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に感謝
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
基本的に:
chmod a+x /path/to/geckdriver-executable
)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)
私も同じ問題に直面していました。私は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
DISPLAY
環境変数を確認してください。コマンドラインでecho $DISPLAY
を実行します。
何も印刷されない場合は、DISPLAYが割り当てられていない状態でFireFoxを実行しています。割り当てる必要があります! pythonスクリプトを実行する前に、コマンドラインでexport DISPLAY=:1
を実行します。
詳細については、このスレッドを確認してください: http://hashcat.net/forum/thread-1973.html
ここで最も簡単な解決策は、Pythonをxvfb-run
で実行するだけだと思います:
Sudo apt-get install xvfb
xvfb-run python <your_file_or_args>
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
後置記号を使用します。それは私にとって問題を売りました
Firefoxを以前の作業バージョンにロールバックします。 2つのバージョンを戻すことをお勧めします。 Firefoxメンテナンスサービスを無効にします。
私はソリューションに取り組んでいて、Firefox Maintenance ServiceがFirefoxをバックグラウンドで最新のビルドに更新しました。これによりコードが破損し、このエラーが発生していました。
これで修正されました!
みんなありがとう!
このエラーは、Xvfbが実行されていないことが原因です。したがって、xvfbを再起動します。
Xvfb :99 -ac
確認してください。これは私のために動作します。
Seleniumを使用してpythonスクリプトだけでなく、スクリプトが実行されているvirtualenv全体に対して再帰的なchownを実行することでこれを修正しました。ファイルを実行しているユーザーの所有権を変更しました。その後、このエラーはなくなりました。
私も同じ問題に直面しました、私がしたことは:
Seleniumパッケージをアップグレードする
Sudo pip install -U Selenium
古いバージョンにロールバックする代わりに(提案されたように)新しいバージョンにロールアップしました(48.0、以前はV47.0を使用していました)。 (アップグレードするには、Toby Speightの指示に従いますが、古いバージョンを選択する代わりに新しいバージョンを選択してください)