Установка безголового Chrome без использования sudo

Вопрос или проблема

Я использую Dreamhost VPS, который не предоставляет возможности sudo. Dreamhost работает на Ubuntu.

Моя конечная цель – использовать Ruby для запуска безголового веб-браузера. Я выбрал гем Watir, который требует chromedriver.

Я установил chromedriver в свою домашнюю директорию ~/chrome/ и добавил его в свой $PATH.

Я получаю ошибку:

/home/user/.rvm/gems/ruby-2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:69:in
`assert_ok': unknown error: Chrome failed to start: exited abnormally
(Selenium::WebDriver::Error::UnknownError)

Похоже, мне нужно установить Xvfb, и все руководства предлагают sudo apt-get install, чего я сделать не могу.

Даже если я установлю Xvfb как отдельный пакет, ему не хватает многих дополнительных компонентов из X11:

[myServer]$ Xvfb :1 -screen 0 1024x768x24
(WW) Не удается открыть RGB файл "/usr/X11R6/lib/X11/rgb.txt"; будет использована встроенная копия.
_XSERVTransSocketOpenCOTSServer: Не удается открыть сокет для inet6
_XSERVTransOpen: сбой открытия транспорта для inet6/ps554048:1
_XSERVTransMakeAllCOTSServerListeners: не удалось открыть слушатель для inet6
ошибка при открытии файла политики безопасности /usr/X11R6/lib/X11/xserver/SecurityPolicy
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/misc/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/TTF/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/Speedo/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/Type1/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/CID/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/75dpi/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/100dpi/, удаление из списка!

Серверная ошибка:
не удалось открыть шрифт по умолчанию 'fixed'

Временное решение – получить инстанс на Amazon Web Services, который позволяет использовать 100% sudo и установить все необходимые пакеты.

Если это система на основе Debian или Debian и в ней установлен apt, вы все равно можете использовать его – в некотором роде.

Получите список URL-адресов, с которых apt-get install .... будет загружать файлы – обратите внимание, что если пакеты уже загружены, он не выведет URL, так как файл существует в /var/cache/apt/archive.

user@darkstar:~$ apt-get upgrade --allow-unauthenticated -y --print-uris

URL-адреса будут внизу вывода, вы можете извлечь их с помощью grep, если это необходимо. В любом случае, соберите все файлы .deb, необходимые для этого, а затем на машине, где у вас есть root, используйте alien, чтобы конвертировать из формата deb в .tgz (или .tar.gz). Подобно пакету Slackware, он будет содержать дерево каталогов от корня / до того места, где файлы фактически находятся.

После того как все они будут сконвертированы, извлеките их все в какую-нибудь директорию. Перейдите в эту директорию и создайте новый файл .tar.gz, содержащий весь необходимый контент, скопируйте его на свой веб-сервер, извлеките, а затем отредактируйте или установите свои $PATH и $LD_LIBRARY_PATH и т.д. по мере необходимости.

Ответ или решение

Для установки Headless Chrome на вашем VPS от Dreamhost без использования sudo вам потребуется несколько шагов. Поскольку вы уже установили chromedriver в вашу домашнюю директорию и добавили его в $PATH, давайте решим проблему с запуском Chrome и зависимыми библиотеками без предоставления прав администратора.

Шаг 1: Установка необходимых библиотек

Вы правы в том, что Xvfb необходим для запуска Chrome в безголовом режиме. К сожалению, установка через apt-get требует прав суперпользователя. Однако вы можете установить Xvfb и другие необходимые библиотеки вручную, скачав их .deb файлы, а затем установив их на своем сервере.

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

    apt-cache depends xvfb
  2. Скачайте нужные .deb файлы
    На машине с доступом к сети и правами администратора вы можете использовать команду:

    apt-get download <package-name>

    Замените <package-name> на названия библиотек, необходимых для установки Xvfb.

  3. Передача файлов на VPS
    Используйте scp или rsync для передачи всех загруженных .deb файлов на ваш VPS.

  4. Установка без sudo
    На вашем VPS экстрактируйте скачанные пакеты и установите их:

    dpkg -x package.deb /some/target/directory

    Замените package.deb на имя вашего скачанного файла. Повторите это для каждого пакета.

Шаг 2: Установка Xvfb

Когда все зависимости будут установлены, запустите Xvfb следующим образом:

Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99

Убедитесь, что DISPLAY переменная окружения корректно установлена. Это позволит вашим приложениям находить виртуальный дисплей.

Шаг 3: Настройка Watir и Selenium

Убедитесь, что у вас установлены необходимые гемы:

gem install watir
gem install selenium-webdriver

Шаг 4: Проверка работы

Теперь вы можете попробовать запустить скрипт на Ruby с использованием Watir. Убедитесь, что указали правильный путь к Chromedriver вашей установки. Например:

require 'watir'

browser = Watir::Browser.new :chrome
# Ваш код для автоматизации
browser.close

Заключение

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

Также, так как Amazon Web Services позволяет использовать полные права администратора, вы можете создать временную инстанцию, чтобы подготовить окружение, а затем перенести его на ваш VPS.

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

Оцените материал
Добавить комментарий

Капча загружается...