Использование Selenium на Raspberry Pi без головы

Я впервые пытаюсь запустить Selenium на малиновом пи с помощью браузера Iceweasel. Я попробовал простой тест этим вечером

# selenium test for /mod2 
# verify: posts, and page name
class TestMod2Selenium(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()

    def test_validate_page_elements(self):
        driver = self.driver
        driver.get("127.0.0.1:5000/mod2")
        self.assertIn("Home - microblog", driver.title)
    def tearDown(self):
        self.driver.close()

ошибка, которую я получаю во время выполнения:

=====================================================================
ERROR: test_validate_page_elements (__main__.TestMod2Selenium)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 58, in setUp
    self.driver = webdriver.Firefox()
  File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__
    self.binary, timeout),
  File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
    self.binary.launch_browser(self.profile)
  File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 61, in launch_browser
    self._wait_until_connectable()
  File "/home/pi/naughton_python/flask/flask/local/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 100, in _wait_until_connectable
    self._get_firefox_output())
WebDriverException: Message: "The browser appears to have exited before we could connect. The output was: ERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nERROR: ld.so: object 'x_ignore_nofocus.so' from LD_PRELOAD cannot be preloaded: ignored.\nError: no display specified\n"

Насколько я понимаю из того, что я прочитал в Интернете, Iceweasel действует как замена Firefox на pi, и многие утверждают, что все, что вам нужно сделать, это вызвать веб-драйвер firefox, чтобы использовать его. Я просто делаю это неправильно?

Спасибо за ваше время.

3 ответа

Это работает для меня на Raspberry Pi без головы:

Монтаж:

sudo apt-get install python-pip iceweasel xvfb
sudo pip install pyvirtualdisplay selenium

Код:

from selenium import webdriver
from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()

driver = webdriver.Firefox()

Я не уверен, почему это происходит, но эта ошибка, которую вы получаете, связана с драйвером Firefox, использующим "собственные события" для симуляции взаимодействия с пользователем (клавиатура, мышь и т. Д.).

Некоторые технические подробности и справочную информацию / проблемы с собственными событиями см. По адресу: https://code.google.com/p/selenium/wiki/NativeEventsOnLinux

Многие пользователи селена (включая меня) считают, что "нативные события" во многих ситуациях проблематичны, и вместо них просто / безопаснее использовать "синтезированные события". Синтезированные события эмулируют взаимодействие с пользователем через JavaScript.

поэтому попробуйте отключить собственные события (установив свойство профиля) в своем драйвере, и вы должны устранить эту ошибку.

Пример:

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.native_events_enabled = False
driver = webdriver.Firefox(profile)
# synthesized events are now enabled for this 
# driver instance... native events are disabled.

Я следил за ответом @fivef, и после борьбы с компиляцией geckodriver для новых версий Firefox я решил попробовать chomedriver и chromium, и это было очень просто:

      sudo apt-get install chromium-chromedriver xvfb python-pip
sudo pip install pyvirtualdisplay selenium

а затем в питоне:

      from selenium import webdriver
from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()

driver = webdriver.Chrome()
Другие вопросы по тегам