Невозможно запустить Firefox в безголовом режиме

Я пытаюсь запустить скрипт Python + Selenium в безголовом режиме с Firefox, используя Xvfb, но получаю ошибки. Для Xvfb не так много документов или руководств по устранению неполадок, поэтому ищите помощь здесь.

Информация об окружении:
ОС: CentOS версии 6.5 (минимальная установка)
Xvfb: xorg-x11-server-Xvfb-1.15.0
Firefox: 52.8.0
geckodriver : 0.24.0
Python: 3.6.7

Выполненные действия:

После завершения установки вышеупомянутых требований. Я начал виртуальный дисплей с:

$Xvfb :1 -ac &

Кроме того, я пробовал с:

$Xvfb :1 -screen 0 1024x768x24 -extension RANDR &

И затем я устанавливаю переменную Display:

export DISPLAY=:1

Когда я пытался запустить Selenium WebDriver в консоли Python, я получаю сообщение об ошибке Отказано в соединении:

> from selenium import webdriver
> from pyvirtualdisplay import Display
> display = Display(visible=0, size=(800, 600))
> display.start()
> driver = webdriver.Firefox()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
keep_alive=True)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

Любая помощь или предложение будут высоко оценены.


person Bill Clinton J    schedule 21.03.2019    source источник
comment
Это может быть очевидно для большинства, но что это за файл "<stdin>", на который ссылается трассировка? Кроме того, вам нужно установить firefoxCapabilities и, возможно, firefoxProfile для безголового браузера.   -  person C. Peck    schedule 21.03.2019
comment
Ошибка @C.Peck ‹stdin› должна выдаваться из веб-драйвера Selenium, но не совсем уверен, почему он выдает такую ​​ошибку. Можете ли вы объяснить немного больше о том, как установить возможности и профиль Firefox, или, пожалуйста, предоставьте ссылку для ссылки на   -  person Bill Clinton J    schedule 21.03.2019
comment
Начну с предостережения, что я совершенно не знаком с xvfb и никогда не пробовал запускать селен из командной строки python (только вызывая скрипты). Я добавлю ответ со сценарием, который может решить это для вас.   -  person C. Peck    schedule 21.03.2019
comment
См. комментарии @MortenB в обсуждении Как программно сделать firefox безголовым в Selenium с помощью python?. MOZ_HEADLESS=1 тест python manage.py сделал свое дело! xvfb-run больше не нужен!!!   -  person DebanjanB    schedule 22.03.2019
comment
@BillClintonJ, как дела? Вы пробовали мой ответ? Спасибо.   -  person Ratmir Asanov    schedule 22.03.2019
comment
@RatmirAsanov - Да, я пытался обновить Firefox, но получал несколько ошибок. Последние версии firefox требуют библиотеки gtk3, но Centos поддерживает только gtk2. Нужно выяснить, какую последнюю версию Firefox поддерживает Centos 6.5. Любые идеи, пожалуйста, сообщите Ошибка XPCOMGlueLoad для файла /home/shrao/firefox/firefox/libmozgtk.so: libgtk-3.so.0: невозможно открыть общий объектный файл: Нет такого файла или каталога. Не удалось загрузить XPCOM.   -  person Bill Clinton J    schedule 05.04.2019
comment
@RatmirAsanov - Я полагаю, что причиной проблемы является старая версия Firefox. На Centos 6.5 я не могу установить ничего, кроме версии 52.2.0 Firefox. Я смог установить FF 60.5 на Centos 6.9, где все работало нормально, также на Centos 7.4 я смог установить более новую версию FF, там все работало нормально. Таким образом, причиной должна быть более старая версия Firefox, я не смог установить более новую версию FF на Centos 6.5 из-за проблемы с поддержкой библиотеки GTK3.   -  person Bill Clinton J    schedule 05.04.2019


Ответы (1)


Существует оболочка вокруг xvfb под названием PyVirtualDisplay, которая, похоже, предназначена именно для этого решения. Если вы просто выполните pip install pyvirtualdisplay, следующий скрипт должен запустить безголовое окно Firefox:

from pyvirtualdisplay import Display
from selenium import webdriver

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

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox(executable_path="/Users/username/Location/geckodriver")
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()
person C. Peck    schedule 21.03.2019
comment
Инициализация дисплея с помощью pyvirtualdisplay прошла успешно, но снова возникает та же ошибка при запуске веб-драйвера. - person Bill Clinton J; 21.03.2019
comment
Вы имеете в виду в этой строке browser = webdriver.Firefox()? - person C. Peck; 21.03.2019
comment
Да, верно, при выполнении этой строки возникла та же ошибка, которую я указал в вопросе. - person Bill Clinton J; 21.03.2019
comment
Пожалуйста, добавьте в свой вопрос, а не в комментарий. - person C. Peck; 21.03.2019
comment
Возможно, вы не указали путь к исполняемому файлу для geckodriver? Вы можете сделать это с помощью webdriver.Firefox(executable_path=/Users/username/Location/geckodriver); Я отредактировал это в своем вопросе. - person C. Peck; 22.03.2019
comment
Я поместил geckodriver в PATH, так что это не должно быть проблемой. - person Bill Clinton J; 05.04.2019