Как можно запустить Selenium в фоновом режиме на сервере?

Как найти и установить Chromium веб-драйвер для использования с библиотекой selenium.py на Linux сервере без GUI и root прав?
  • 7 февраля 2024 г. 19:39
Ответы на вопрос 2
Запуск Selenium в фоновом режиме на сервере обычно включает использование браузера в режиме headless, то есть без графического интерфейса. Для этого нужно настроить Selenium для работы с WebDriver, который поддерживает режим headless, такой как ChromeDriver (для Google Chrome) или GeckoDriver (для Mozilla Firefox). 

Для установки Chromium WebDriver без прав root на Linux сервере без графического интерфейса пользователя, выполните следующие шаги:

1. Скачайте последнюю версию ChromeDriver, соответствующую версии вашего Chromium. Можно использовать wget для скачивания прямо с сервера:

```bash
wget https://chromedriver.storage.googleapis.com/{version}/chromedriver_linux64.zip
```

Замените `{version}` на нужную версию ChromeDriver.

2. Распакуйте архив:

```bash
unzip chromedriver_linux64.zip
```

Если у вас нет утилиты `unzip`, вы можете установить ее или использовать другую команду, например, `tar` для распаковки zip-архивов.

3. Переместите распакованный файл `chromedriver` в директорию, где у вас есть права на запись и которая входит в ваш `PATH`. Например, если у вас есть локальная директория `~/bin`:

```bash
mv chromedriver ~/bin/
chmod +x ~/bin/chromedriver  # Делаем файл исполняемым
```

Добавьте `~/bin` в ваш `PATH`, если это еще не сделано, добавив следующую строку в ваш `~/.bashrc` или `~/.bash_profile`:

```bash
export PATH=$PATH:~/bin
```

Затем примените изменения:

```bash
source ~/.bashrc  # or source ~/.bash_profile
```

4. После установки WebDriver, вы можете настроить Selenium для запуска браузера в режиме headless. Вот пример кода на Python, который запускает Chrome в режиме headless:

```python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")  # Режим без графического интерфейса
chrome_options.add_argument("--no-sandbox")  # Отключение режима песочницы, используемое часто в сервисах без GUI
chrome_options.add_argument("--disable-dev-shm-usage")  # Исправляет проблемы с ограниченным /dev/shm в контейнерах

driver = webdriver.Chrome(executable_path='путь/до/chromedriver', options=chrome_options)

driver.get("http://www.example.com")
print(driver.title)

driver.quit()
```

Замените `'путь/до/chromedriver'` путем к исполняемому файлу `chromedriver`, который вы установили ранее.

Теперь, когда Selenium сконфигурирован для запуска в headless режиме, вы можете работать с ним на сервере в фоновом режиме.
На сколько мне известно, если даже установить браузер, найти нужный хромдрайвер, то всё равно может не работать. Потому что не будет физического монитора и браузер не сможет существовать в "нужном" разрешении. 
Нужно настроить виртуальный монитор на сервере, возможно стоит почитать здесь:
Похожие вопросы