# 🐧 Настройка Chrome/ChromeDriver на Ubuntu сервере

## Проблема
При запуске парсинга на Ubuntu сервере возникает ошибка:
```
Message: session not created: Chrome instance exited. Examine ChromeDriver verbose log to determine the cause.
```

## Решение

### 1️⃣ Установка Chrome/Chromium и ChromeDriver

На сервере Ubuntu выполните следующие команды:

```bash
# Обновляем список пакетов
sudo apt-get update

# Устанавливаем Chromium (легковесная версия Chrome для серверов)
sudo apt-get install -y chromium-browser chromium-chromedriver

# Или если используете Google Chrome напрямую:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get install -y ./google-chrome-stable_current_amd64.deb

# Для Google Chrome нужно отдельно установить ChromeDriver:
CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+' | head -1)
CHROMEDRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}")
wget -O /tmp/chromedriver.zip "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"
sudo unzip /tmp/chromedriver.zip -d /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
```

### 2️⃣ Проверка установки

```bash
# Проверяем Chromium
chromium-browser --version

# Проверяем ChromeDriver
chromedriver --version

# Или для Google Chrome:
google-chrome --version
```

### 3️⃣ Установка необходимых зависимостей

```bash
# Устанавливаем необходимые библиотеки для GUI в headless режиме
sudo apt-get install -y \
    libnss3 \
    libatk-bridge2.0-0 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2
```

### 4️⃣ Установка ChromeDriver через pip (альтернативный способ)

```bash
# Если используете Python окружение
source venv/bin/activate  # Активируйте ваше виртуальное окружение

# Устанавливаем webdriver-manager для автоматического управления драйверами
pip install webdriver-manager
```

Если вы используете `webdriver-manager`, нужно будет обновить код в `functions.py`:

```python
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
```

## Что было исправлено в коде

### Добавлены аргументы для работы на Linux сервере:

1. **`--no-sandbox`** - Критично для работы на Linux без root прав
2. **`--disable-dev-shm-usage`** - Избегает проблем с ограниченным размером `/dev/shm`
3. **`--disable-gpu`** - Отключает GPU (не нужен в headless)
4. **`--disable-software-rasterizer`** - Отключает софтверный растеризатор
5. **`--window-size=1920,1080`** - Устанавливает размер окна (нужно для некоторых сайтов)

### Улучшено логирование:

- Добавлены сообщения об успешной инициализации
- Добавлены подсказки по установке при ошибках

## Быстрая установка (одной командой)

```bash
sudo apt-get update && \
sudo apt-get install -y chromium-browser chromium-chromedriver \
    libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 \
    libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
    libgbm1 libasound2
```

## Проверка работы

После установки запустите бота и проверьте логи:

```bash
# Запустите бота
python run.py

# Или в screen
screen -S botID
python run.py
# Нажмите Ctrl+A, затем D для отсоединения

# Проверьте логи
tail -f logs/bot.log
```

В логах должно появиться:
```
[INFO] ChromeDriver успешно инициализирован
```

## Решение проблем

### Проблема: ChromeDriver не найден

```bash
# Проверьте путь к ChromeDriver
which chromedriver

# Если не найден, добавьте в PATH
export PATH=$PATH:/usr/lib/chromium-browser
```

### Проблема: Права доступа

```bash
# Дайте права на выполнение
sudo chmod +x /usr/bin/chromium-browser
sudo chmod +x /usr/bin/chromedriver
```

### Проблема: Несовместимость версий

Убедитесь, что версии Chrome и ChromeDriver совместимы:

```bash
# Проверьте версии
chromium-browser --version
chromedriver --version
```

### Проблема: Недостаточно памяти

Если сервер имеет ограниченную память, добавьте ограничения:

```python
# В functions.py можно добавить:
options.add_argument('--memory-pressure-off')
options.add_argument('--max_old_space_size=512')  # Ограничение памяти в MB
```

## Альтернатива: Использование Firefox (GeckoDriver)

Если Chrome не работает, можно использовать Firefox:

```bash
# Установка Firefox и GeckoDriver
sudo apt-get install -y firefox firefox-geckodriver
```

И изменить в `functions.py`:

```python
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument('--headless')
driver = Firefox(options=options)
```

## Проверка после установки

1. ✅ Установлены Chrome/Chromium и ChromeDriver
2. ✅ Установлены все необходимые библиотеки
3. ✅ Запущен бот
4. ✅ В логах есть "ChromeDriver успешно инициализирован"
5. ✅ Парсинг запускается без ошибок

После выполнения всех шагов парсинг должен работать на Ubuntu сервере! 🚀
