Можно ли запустить веб-драйвер selenium (Firefox) без графического интерфейса?

84

Мы рассматриваем возможность обновления нашего производственного сервера с Ubuntu- desktop 10.04 до Ubuntu- сервера 12.04.

У нас есть различные службы, работающие на нашей текущей настольной ОС, такой как Selenium Web Driver. Мой вопрос в том, можно ли запустить Selenium Web Driver из системы на основе cli?

Моя непосредственная мысль заключается в том, что она не может, потому что она зависит от Firefox, но я бы хотел, чтобы кто-то доказал, что я ошибаюсь!

Теги:
selenium
webdriver

8 ответов

76
Лучший ответ

То, что вы ищете, это .

Да, можно без проблем запустить Selenium на Firefox. Ниже приведена post.

Ниже приведены краткие шаги по настройке Xvfb

#install Xvfb
sudo apt-get install xvfb

#set display number to :99
Xvfb :99 -ac &
export DISPLAY=:99    

#you are now having an X display by Xvfb
  • 4
    Это работает и поддерживает скриншоты. Я использую это. Это также работает с Google Chrome.
  • 0
    Я не думаю, что это работает больше (по крайней мере, не легко, потому что это требует нового geckodriver так же, как хром)
Показать ещё 6 комментариев
15

Мне легко удалось скрыть окно браузера.

Просто установить PhantomJS. Затем измените эту строку:

driver = webdriver.Firefox()

в

driver = webdriver.PhantomJS()

Остальную часть кода не нужно менять, и браузер не откроется. Для целей отладки используйте driver.save_screenshot('screen.png') на разных этапах вашего кода или просто продолжайте использовать веб-редактор Firefox в разработке.

  • 1
    PhantomJS в настоящее время не находится в активной разработке. Git-репозиторий заархивирован.
10

Если вам нужна поддержка браузера без гарнитуры, тогда вы можете принять другой подход.

https://github.com/detro/ghostdriver

Это было объявлено во время Селенской конференции, и оно все еще находится в разработке. Он использует PhantomJS в качестве браузера и намного лучше, чем HTMLUnitDriver, пока нет скриншотов, но поскольку он все еще находится в активной разработке.

7

Да. Вы можете использовать HTMLUnitDriver вместо FirefoxDriver при запуске webdriver. Это безболезненная настройка браузера. Подробности можно найти здесь.

  • 1
    Будет ли это поддерживать такие функции, как save_screenshot ()? coreygoldberg.blogspot.co.uk/2011/06/...
  • 0
    Не пробовал, но это возможно, потому что вы по-прежнему создаете пользовательский интерфейс, но отображаете его в «виртуальном» окне.
Показать ещё 1 комментарий
4

Необязательно использовать pyvirtualdisplay следующим образом:

from pyvirtualdisplay import Display

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

#do selenium job here

display.close()

Более короткая версия:

with Display() as display:
    # selenium job here

Это, как правило, инкапсуляция python из xvfb и более удобная.

Кстати, хотя PhantomJS является браузером без заголовка, и окно не будет открыто, если вы его используете, кажется, что для PhantomJS все еще нужна среда gui.

Я получил код ошибки -6, когда вместо Firefox() вместо Firefox() я использую PhantomJS() в режиме безголовы (консоль с подключенной шлейфом). Однако все в порядке в среде рабочего стола.

2

Другим вариантом является GhostDriver, который теперь официально поддерживается WebDriver: Фактический прирост производительности Ghostdriver

1

Имейте в виду, что веб-клиент HtmlUnitDriver является однопоточным, а Ghostdriver - только 40% функций, которые должны быть WebDriver.

Тем не менее, Ghostdriver работает правильно для тестов, и у меня возникают проблемы с подключением его к концентратору WebDriver.

  • 0
    Предоставляет ли это какую-либо новую информацию, которую не дают другие ответы?
0

UPDATE: вам больше не понадобится XVFB для запуска Firefox. Firefox v55 на Linux и Firefox v56 на Windows/Mac теперь поддерживает безгласное выполнение.

Я добавил здесь некоторую практическую документацию:

https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java

  • 1
    Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню