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


113

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

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

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


Ответы:


102

Вы ищете .

Да, можно запустить Selenium в Firefox без головы. Вот сообщение, за которым вы можете следить.

Вот краткие инструкции по настройке 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

5
Это работает и поддерживает скриншоты. Я использую это. Он также работает с Google Chrome.
— Исаак

Я не думаю, что это больше работает (по крайней мере, нелегко, потому что для этого требуется новый geckodriver, как это делал хром)
— Архимед Траджано

1
@ArchimedesTrajano Это все еще работает. Инструкции предназначены для создания виртуального дисплея с использованием Xvfb, а не для установки и настройки Selenium (для чего требуется наличие geckodriverна пути).
— expz

2
Мне нравится делать это из Python, что вы можете сделать с помощью subprocess.Popen('Xvfb...')или os.system('Xvfb...'), но обязательно сделайте это перед импортом webdriver.
— поводу

4
эта ссылка теперь не работает
— oldboy

22

В Chrome теперь есть безголовый режим:

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)

4
PhantomJS в настоящее время не находится в активной разработке. Репозиторий Git заархивирован.
— Войцех Якубас

1
Selenium также прекратил поддержку PhantomJS со следующим сообщением «UserWarning: поддержка Selenium для PhantomJS устарела, пожалуйста, используйте вместо него безголовые версии Chrome или Firefox»
— Йорг

11

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


1
Будет ли это поддерживать такие функции, как save_screenshot ()? coreygoldberg.blogspot.co.uk/2011/06/...
— nonshatter

Не пробовал, но это возможно, потому что вы фактически все еще создаете пользовательский интерфейс, но показываете его в «виртуальном» окне.
— Grahaminn

2
HTMLUnitDriver НЕ будет поддерживать снимок экрана, так как контент вообще не отображается (ошибка 1361). Я могу придумать альтернативу - использовать getHTMLSource и показывать HTML-страницу, а не снимок экрана.
— AJ

10

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

https://github.com/detro/ghostdriver

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


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все еще требуется среда графического интерфейса.

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


3

ОБНОВЛЕНИЕ: вам больше не нужен XVFB для запуска безголового Firefox. Firefox v55 + в Linux и Firefox v56 + в Windows / Mac теперь поддерживает автономное выполнение.

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

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


1
Комментарии не подлежат расширенному обсуждению; этот разговор был перемещен в чат .
— Бхаргав Рао

У меня это не сработало. Я не уверен, но думаю, что XVFB все еще требуется.
— Макс Малыш

Я использую безголовые браузеры в Firefox и Chrome уже несколько лет. Интерфейс WebDriver для Selenium теперь даже поддерживает параметр setHeadless.
— Николас ДиПиацца,


1

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

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


Предоставляет ли это какую-либо новую информацию, которой нет в других ответах?
— Остин Хенли,

0

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


0

возможно, вам нужно установить размер окна. как:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920x1080');

browser = webdriver.Chrome(options=options,executable_path = './chromedriver')

если тоже не работает, попробуйте увеличить размер окна.


0

Установите и запустите контейнерный Firefox:

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

Подключитесь, используя webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.