Не удалось вызвать firefox из селена в python на машине AWS
Я пытаюсь использовать selenium из python, чтобы очистить некоторые страницы динамиков с помощью javascript. Однако я не могу назвать firefox после того, как я выполнил инструкцию селена на странице pypi (http://pypi.python.org/pypi/selenium). Я установил firefox на AWS ubuntu 12.04. Сообщение об ошибке, которое я получил:
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'
Я искал в Интернете и обнаружил, что эта проблема возникла с другими людьми (https://groups.google.com/forum/?fromgroups=#!topic/selenium-users/21sJrOJULZY). Но я не понимаю решение, если оно есть.
Кто-нибудь может мне помочь? Спасибо!
Ответы
Ответ 1
Проблема заключается в том, что 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 требуется один из следующих back-end: Xvfb, Xephyr, Xvnc.
Это должно решить вашу проблему.
Ответ 2
У меня тоже была такая же проблема. Я был на Firefox 47 и Selenium 2.53. Так что я сделал, было понижено Firefox до 45. Это сработало.
1) Сначала удалите Firefox 47:
sudo apt-get purge firefox
2) Проверьте доступные версии:
apt-cache show firefox | grep Version
Он покажет доступные версии firefox, например:
Version: 47.0+build3-0ubuntu0.16.04.1
Version: 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
Надеюсь, что это поможет.