Невозможно запустить Firefox в режиме без головы - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь запустить скрипт 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 &

А потом я устанавливаю переменную дисплея:

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

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

1 Ответ

0 голосов
/ 21 марта 2019

Существует оболочка для 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...