31

Python からセレンを使用して、javascript でいくつかのダイナミクス ページをスクレイピングしようとしています。しかし、pypi ページ (http://pypi.python.org/pypi/selenium) の selenium の指示に従った後、firefox を呼び出すことができません。AWS ubuntu 12.04 に firefox をインストールしました。私が得たエラーメッセージは次のとおりです。

In [1]: from selenium import webdriver

In [2]: br = webdriver.Firefox()
---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
/home/ubuntu/<ipython-input-2-d6a5d754ea44> in <module>()
----> 1 br = webdriver.Firefox()

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.pyc in __init__(self, firefox_profile, firefox_binary, timeout)
     49         RemoteWebDriver.__init__(self,
     50             command_executor=ExtensionConnection("127.0.0.1", self.profile,
---> 51             self.binary, timeout),
     52             desired_capabilities=DesiredCapabilities.FIREFOX)
     53

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.pyc in __init__(self, host, firefox_profile, firefox_binary, timeout)
     45         self.profile.add_extension()
     46
---> 47         self.binary.launch_browser(self.profile)
     48         _URL = "http://%s:%d/hub" % (HOST, PORT)
     49         RemoteConnection.__init__(

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.pyc in launch_browser(self, profile)
     42
     43         self._start_from_profile_path(self.profile.path)
---> 44         self._wait_until_connectable()
     45
     46     def kill(self):

/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.pyc in _wait_until_connectable(self)
     79                 raise WebDriverException("The browser appears to have exited "
     80                       "before we could connect. The output was: %s" %
---> 81                       self._get_firefox_output())
     82             if count == 30:
     83                 self.kill()

WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: Error: no display specified\n'

Web で検索したところ、この問題が他の人にも発生していることがわかりました (https://groups.google.com/forum/?fromgroups=#!topic/selenium-users/21sJrOJULZY)。しかし、もしそうなら、私は解決策を理解していません。

誰でも私を助けてもらえますか?ありがとう!

4

4 に答える 4

57

問題は、Firefox にはディスプレイが必要なことです。私の例では、表示をシミュレートするためにpyvirtualdisplayを使用しました。解決策は次のとおりです。

from pyvirtualdisplay import Display
from selenium import webdriver

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

driver= webdriver.Firefox()
driver.get("http://www.somewebsite.com/")

<---some code--->

#driver.close() # Close the current window.
driver.quit() # Quit the driver and close every associated window.
display.stop()

pyvirtualdisplay には、Xvfb、Xephyr、Xvnc のいずれかのバックエンドが必要であることに注意してください。

これで問題が解決するはずです。

于 2012-10-24T18:27:06.433 に答える