Чи можливо запустити веб-драйвер селену (Firefox) без GUI?


113

Ми розглядаємо можливість модернізації нашого виробничого сервера з Ubuntu- desktop 10.04 до Ubuntu- сервера 12.04.

У нашій операційній системі настільних комп'ютерів працюють різні сервіси, такі як веб-драйвер Selenium. Моє запитання: чи можна запускати веб-драйвер Selenium із системи на базі 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.
Ісаак

Я не думаю, що це працює більше (принаймні, не просто, тому що для нього потрібен новий гекодрівер, як і хром)
Архімед Траяно

1
@ArchimedesTrajano Це все ще працює. Вказівки призначені для створення віртуального дисплея за допомогою Xvfb, а не для встановлення та налаштування Selenium (що вимагає наявності geckodriverна шляху).
expz

2
Мені подобається це робити з Python, що ви можете зробити з subprocess.Popen('Xvfb...')або os.system('Xvfb...'), але переконайтеся, що це потрібно перед імпортом веб-драйвера.
словазгадано

4
це посилання зараз розірвано
oldboy

22

Зараз у Chrome є режим без голови:

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

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

1
Також Selenium перестав підтримувати PhantomJS із таким повідомленням: "Попередження користувача: Підтримка селену для PhantomJS знецінена, замість цього використовуйте безголові версії Chrome або Firefox"
Jörg

11

Так. Ви можете використовувати HTMLUnitDriverзамість цього під FirefoxDriverчас запуску веб-драйвера. Це налаштування браузера без голови. Деталі можна знайти тут .


1
Чи підтримують такі функції підтримки, як save_screenshot ()? coreygoldberg.blogspot.co.uk/2011/06 / ...
nonshatter

Не намагався, але це можливо, тому що ви все ще створюєте інтерфейс користувача, але показуєте його у віртуальному вікні.
grahaminn

2
HTMLUnitDriver НЕ підтримує скріншот захоплення, оскільки вміст взагалі не відображається (випуск 1361). Можливо, я думаю про використання getHTMLSource та показ HTML-сторінки, а не скріншот.
AJ

10

Якщо ви хочете підтримати бездротовий браузер, то ви можете застосувати інший підхід.

https://github.com/detro/ghostdriver

Про це було оголошено під час Селенської конференції, і вона все ще розвивається. Він використовує 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

Це, як правило, інкапсуляція пітона xvfb, і якось більш зручне.

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

Я отримав код помилки -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
Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Bhargav Rao

Це не спрацювало для мене. Я не впевнений, але, думаю, 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.