Как решить проблему с использованием Selenium в связке с Aiogram на VPS-сервере?

Какова причина, по которой код бота на Python, использующего Selenium совместно с aiogram 3.17.0 в среде Ubuntu 22.04, не работает, хотя на Windows все функционировало корректно? Я уже пробовал удалить параметр --user-data-dir, но это не дало результата. Вот сокращенный пример кода: 

```python
bot = Bot("bot_token", default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher()

user_data_dir = tempfile.mkdtemp()

options = Options()
options.add_argument("--headless")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--no-sandbox")
options.add_argument('--start-maximized')
options.add_argument(f"--user-data-dir={user_data_dir}")
options.add_argument("--incognito")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")

async def handle_task(callback: CallbackQuery, username: str, password: str, action: str):
    await callback.message.answer(f"Выполняю, ожидайте")
    await run_selenium_task(username, password, action, callback)

async def run_selenium_task(username: str, password: str, action: str, callback: CallbackQuery):
    ob = Screenshot.Screenshot()
    service = Service(r"/root/elschool/chromedriver/chromedriver",log_path='chromedriver.log')
    browser = webdriver.Chrome(service=service)

    try:
        browser.set_window_size(1920, 1080)
        browser.get("https://elschool.ru/logon/index")

        WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.ID, "login"))
        )

        entry_wrapper_btn = browser.fi
```
  • 31 января 2025 г. 6:04
Ответы на вопрос 2
Использование Selenium в связке с Aiogram на VPS может вызывать ряд проблем, особенно если код работает на Windows, но не функционирует на Ubuntu. Причины могут быть связаны с конфигурацией среды, настройками самого браузера и драйвера, а также с отсутствием необходимых зависимостей. Рассмотрим несколько возможных причин и решений:

1. **Установленные зависимости**:
   Убедитесь, что все зависимости для работы Selenium и браузера находятся в системе Ubuntu. В частности, вам нужно установить Chrome или другой используемый браузер, а также убедиться в наличии необходимых библиотек. Например, вы можете установить Chrome и необходимые библиотеки следующими командами:

   ```bash
   sudo apt update
   sudo apt install -y wget unzip
   wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
   sudo apt install -y ./google-chrome-stable_current_amd64.deb
   ```

2. **Проблемы с драйвером**:
   Убедитесь, что версия chromedriver соответствует установленной версии Google Chrome. Если они не совпадают, это может вызвать ошибки. Вы можете проверить версию Chrome с помощью:

   ```bash
   google-chrome --version
   ```

   А затем скачать соответствующую версию chromedriver с официального сайта [Chromedriver](https://sites.google.com/chromium.org/driver/).

3. **Опции для Headless режима**:
   Параметры, используемые для запуска в headless режиме, могут требовать дополнительных настроек. Попробуйте исключить некоторые параметры (например, `--disable-gpu` или `--incognito`), чтобы выяснить, не мешают ли они работе Selenium.

4. **Проблемы с пользовательскими данными**:
   Если вы используете опцию `--user-data-dir`, убедитесь, что у вашего приложения есть права на запись в эту директорию. Также попробуйте запустить Selenium без этой опции и посмотрите, изменится ли поведение.

5. **Логи и отладка**:
   Проверьте файлы логов `chromedriver.log`, чтобы увидеть возможные ошибки или предупреждения, которые помогут диагностировать проблему.

6. **Проблемы с отображением**:
   В средах без графического интерфейса иногда возникают проблемы с отображением элементов. Используйте отладочный режим, чтобы понять, загружается ли страница правильно. Иногда отсутствуют шрифты или другие ресурсы, необходимые для корректного рендеринга.

7. **Использование виртуального дисплея**:
   Вы можете запустить виртуальный дисплей с помощью `Xvfb`. Это поможет вам избежать проблем с графическим интерфейсом. Установите `Xvfb` и запустите его перед выполнением кода:

   ```bash
   sudo apt install -y xvfb
   Xvfb :99 -ac &
   export DISPLAY=:99
   ```

8. **Права доступа**:
   Убедитесь, что у вашего пользовательского аккаунта на VPS есть права на выполнение всех необходимых операций, включая доступ к локальным файлам и сетевым ресурсам.

Попробуйте выполнить предложенные шаги по устранению неполадок и отладке. Если ошибка все еще возникает, предоставьте больше информации о том, какие конкретно ошибки появляются, и возможно, будет полезно просмотреть логи работы вашего Selenium-кода.
исправил, забыл добавить options к драйверу вот и все
Похожие вопросы