Можно ли запустить веб-драйвер 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
Grahaminn
источник
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. Это настройка безголового браузера. Подробности можно найти здесь .

AJ
источник
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, пока нет скриншотов, но он все еще находится в активной разработке.

haroonzone
источник
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.

Guillemhs
источник
Предоставляет ли это какую-либо новую информацию, которой нет в других ответах?
Остин Хенли,
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')

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

U2647
источник
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')
Макс Малыш
источник