# 🔧 Исправления для стабильной работы на Linux сервере

## Проблема

На Linux сервере ChromeDriver падал во время работы:
- Ошибка "Connection refused" при попытке использовать драйвер
- Зависание на этапе ожидания загрузки страницы
- Драйвер падал тихо, без явных ошибок

## Решения

### 1️⃣ Упрощенная проверка драйвера

**Было:** Сложная проверка через `process.poll()` и `current_url`

**Стало:** Простая и быстрая проверка через `window_handles`:
```python
def check_driver_alive():
    try:
        _ = driver.window_handles
        return True
    except Exception:
        return False
```

**Преимущества:**
- ✅ Быстрая проверка (не требует загрузки страницы)
- ✅ Надежная на Linux сервере
- ✅ Не вызывает дополнительных операций с драйвером

### 2️⃣ Улучшенное переподключение

**Добавлено:**
- Автоматическое убийство зависших процессов Chrome/ChromeDriver
- Задержка перед переподключением (дает время процессу завершиться)
- Установка таймаутов при переподключении

```python
# Убиваем зависшие процессы
os.system("pkill -f chromedriver 2>/dev/null")
os.system("pkill -f chromium-browser 2>/dev/null")
os.system("pkill -f chrome 2>/dev/null")
time.sleep(2)  # Даем время процессам завершиться
```

### 3️⃣ Мониторинг драйвера во время ожидания

**Было:** Простое ожидание 12 секунд без проверки

**Стало:** 
- Проверка драйвера каждую секунду во время ожидания
- Автоматическое переподключение при падении
- Уменьшено время ожидания до 6 секунд (меньше риск падения)
- Перезагрузка страницы после переподключения

### 4️⃣ Дополнительные аргументы Chrome для Linux

Добавлены аргументы для экономии ресурсов:
- `--memory-pressure-off` - Отключает режим экономии памяти
- `--max_old_space_size=512` - Ограничение памяти
- `--disable-setuid-sandbox` - Дополнительная безопасность
- `--disable-accelerated-2d-canvas` - Экономия ресурсов
- `--disable-accelerated-video-decode` - Отключает ускорение видео

### 5️⃣ Проверки драйвера перед операциями

Добавлены проверки драйвера:
- ✅ Перед переходом на страницу
- ✅ Во время ожидания загрузки
- ✅ После ожидания
- ✅ Перед скроллингом
- ✅ Перед поиском кнопки
- ✅ Перед поиском телефонов

### 6️⃣ Ограничение операций

**Скроллинг:**
- Максимум 5 попыток скроллинга (вместо бесконечного цикла)
- Уменьшено время ожидания между скроллами (с 2 до 1 секунды)
- Проверка драйвера при каждой итерации

## Результат

### До исправлений:
```
✅ Страница загружена, ждем 12 секунд...
[ЗАВИСАНИЕ - драйвер падает]
⚠️ Ошибка соединения при поиске кнопки
Connection refused
```

### После исправлений:
```
✅ Страница загружена
⏳ Ожидание загрузки страницы (6 секунд) с мониторингом драйвера...
⚠️ Драйвер упал во время ожидания (секунда 3/6)
🔄 Переподключение ChromeDriver...
✅ ChromeDriver переподключен
✅ Страница перезагружена после переподключения
[Парсинг продолжается]
```

## Важные моменты

1. **Время ожидания:** Уменьшено с 12 до 6 секунд для снижения риска падения
2. **Автоматическая очистка:** Зависшие процессы Chrome убиваются перед переподключением
3. **Непрерывный мониторинг:** Драйвер проверяется на каждом этапе работы
4. **Экономия ресурсов:** Дополнительные аргументы Chrome для работы на серверах с ограниченными ресурсами

## Если проблемы остаются

1. **Проверьте ресурсы сервера:**
   ```bash
   free -h  # Проверка памяти
   df -h    # Проверка места на диске
   ```

2. **Увеличьте swap (если памяти мало):**
   ```bash
   sudo fallocate -l 2G /swapfile
   sudo chmod 600 /swapfile
   sudo mkswap /swapfile
   sudo swapon /swapfile
   ```

3. **Проверьте версии Chrome и ChromeDriver:**
   ```bash
   chromium-browser --version
   chromedriver --version
   ```

4. **Очистите временные файлы Chrome:**
   ```bash
   rm -rf /tmp/.org.chromium.Chromium.*
   ```

Теперь парсер должен стабильно работать на Linux сервере! 🚀
