NetrunНа главную

Сервисы и скрипты

Как запустить Selenium на сервере без своего компьютера

· 5 мин чтения

Коротко

Selenium на сервере запускается как обычный фоновый скрипт, но с одной особенностью: автоматическая сборка ставит язык и библиотеки, а браузер — нет. Поэтому такому проекту нужен свой Dockerfile: обычный текстовый файл-рецепт рядом с кодом, где написано установить Chromium, а сам браузер запускают в режиме headless, то есть без окна, потому что экрана на сервере нет. В Netrun достаточно положить такой Dockerfile в папку с кодом и загрузить её: платформа соберёт проект по вашему рецепту и будет держать скрипт запущенным без вашего компьютера.

Обычно скрипт на Selenium пишут и гоняют на своём ноутбуке: браузер открывается, кликает, собирает данные. Проблема начинается там, где сбор должен идти сам по себе — закрыли крышку или ушли из дома, и всё остановилось. Дальше начинается классический путь: арендовать сервер, поставить туда Chrome и драйвер, догадаться, почему браузер падает без графической оболочки, добавить шрифты, повесить скрипт в автозапуск и следить, чтобы он не умер молча. На этом месте и появляется вопрос, как запустить Selenium на сервере и не заниматься сервером.

В Netrun вы загружаете папку с кодом, а платформа собирает проект, запускает его на своих серверах и показывает логи в кабинете. Скажем честно про единственный технический момент, который придётся освоить: браузер в автоматическую сборку не входит, поэтому рядом с кодом нужно положить свой Dockerfile, который его поставит. Это одна короткая настройка, дальше всё обычно. Ниже — как её сделать и что ещё проверить, чтобы скрипт работал без вас.

  1. Проверьте, нужен ли вам Selenium вообще#

    Примерно половине задач браузер не нужен. Откройте нужную страницу, посмотрите её исходный код: если данные уже там, их достаточно забрать обычным запросом через requests или httpx и разобрать HTML. Такой парсер запускается проще, работает в разы быстрее и требует заметно меньше ресурсов. Selenium оправдан там, где содержимое рисуется скриптами прямо в браузере, где нужен вход по логину с кликами или где без настоящего браузера страница приходит пустой.

  2. Положите рядом с кодом Dockerfile, который ставит браузер#

    Автоматическая сборка ставит Python и библиотеки из requirements.txt, но браузера в ней нет — поэтому Selenium на сервере обычно падает с жалобой, что не нашёл Chrome. Решается это своим Dockerfile: это обычный текстовый файл с именем Dockerfile в корне проекта, в котором по строчкам записано, из какого образа начать, что доустановить и какой командой запускать. Если такой файл лежит рядом с кодом, Netrun собирает проект по нему, а не по автоматическому рецепту. Проще всего взять готовый образ, где Chromium и драйвер уже установлены, либо добавить строку с установкой пакетов chromium и chromium-driver.

  3. Запустите браузер в headless-режиме и с нужными ключами#

    На сервере нет экрана, поэтому браузер запускают в headless-режиме — без окна. В настройках Selenium это ключ --headless, и внутри контейнера к нему обычно добавляют --no-sandbox и --disable-dev-shm-usage: без них браузер стартует и сразу падает. Полезно задать и размер окна ключом --window-size, иначе сайт решит, что перед ним крошечный экран, и покажет другую вёрстку. И не забудьте закрывать браузер после работы: забытые копии съедают память быстрее, чем кажется.

  4. Вынесите логины и ключи в секреты#

    Если скрипт входит в личный кабинет, ходит в платный API или складывает результат в чужой сервис, не оставляйте пароли и токены в коде. Читайте их из переменных окружения — при настройке проекта Netrun спросит значения и подставит их в зашифрованном виде. В архиве и в репозитории на GitHub они лежать не будут, а поменять значение можно в кабинете, не трогая код.

  5. Сохраняйте результат в постоянную папку /data#

    Файлы, записанные просто рядом с кодом, пересоздаются при следующей публикации, поэтому таблицы, выгрузки и скриншоты сохраняйте в папку /data — её содержимое переживает и обновление кода, и перезапуск. В кабинете есть вкладка «Данные»: там видно список файлов, их можно скачать, догрузить или удалить, не поднимая ничего дополнительно. Если данных много и по ним нужны выборки, положите в ту же папку файл базы SQLite или подключите внешнюю базу: отдельной услуги «база данных» у платформы нет.

  6. Загрузите проект и проверьте первый запуск в логах#

    Принесите папку ZIP-архивом или импортируйте репозиторий с GitHub, в том числе приватный. Netrun увидит ваш Dockerfile, соберёт проект по нему и запустит скрипт; логи и статус публикации видны в кабинете в реальном времени, так что первую ошибку браузера вы увидите сразу. Стоит знать заранее: браузер тяжелее обычного скрипта и памяти ему нужно заметно больше, на бесплатном тарифе её может не хватить, и тогда браузер будет падать при старте. Актуальные цены и лимиты видны в кабинете.

В итоге сбор данных идёт на наших серверах и не зависит от того, включён ли ваш компьютер: при сбое проект перезапускается, а вы получаете уведомление. Про бесплатный тариф стоит знать заранее: фоновый скрипт не засыпает, потому что будить его некому, поэтому бесплатно он работает 3 дня, а потом проект выключается. Код, настройки и секреты при этом остаются на месте, а за сутки до выключения приходит предупреждение. Если сбор должен идти постоянно, нужен тариф Pro. Попробовать Netrun.

Частые вопросы

Почему Selenium пишет, что не может найти Chrome или chromedriver?

Потому что браузера в контейнере действительно нет: автоматическая сборка ставит язык и библиотеки, но не браузер. Добавьте в корень проекта Dockerfile, который ставит Chromium вместе с драйвером, и опубликуйте проект заново — платформа соберёт его по вашему файлу.

Обязательно ли запускать браузер в headless-режиме?

Да. На сервере нет экрана, и обычный оконный режим просто не стартует. Добавьте ключ --headless, а вместе с ним --no-sandbox и --disable-dev-shm-usage: внутри контейнера без них браузер часто падает сразу после запуска.

Можно ли вместо Selenium запустить Playwright?

Да, правило то же самое: Playwright тоже нужен браузер, которого в автоматической сборке нет. Напишите Dockerfile на основе официального образа Playwright с уже установленными браузерами либо добавьте в него команду установки браузеров. Дальше проект публикуется как обычно.

Как запускать Selenium-скрипт по расписанию, например раз в час?

Отдельного планировщика в Netrun нет, расписание делается внутри самого скрипта: бесконечный цикл с паузой или библиотека вроде schedule и APScheduler. Проект при этом живёт как постоянно работающий фоновый скрипт и сам решает, когда просыпаться и открывать браузер.

Хватит ли бесплатного тарифа для запуска браузера?

Не всегда: браузер заметно прожорливее обычного скрипта, и на бесплатном тарифе ему может не хватить памяти — обычно это выглядит как падение сразу после старта. Помогает экономия на своей стороне (закрывать браузер после каждой задачи, не держать много вкладок) или переход на Pro. Актуальные цены и лимиты видны в кабинете.

Куда сохранять собранные данные и скриншоты?

В постоянную папку /data: всё, что туда записано, переживает обновление кода и перезапуск проекта. Забрать файлы можно во вкладке «Данные» в кабинете — скачать по одному или папкой. Файлы, записанные рядом с кодом, при следующей публикации создаются заново.

Можно ли запустить проект на Python — Django, Flask или FastAPI?

Да. Положите зависимости в requirements.txt — Netrun определит Python и соберёт проект сам. Django, Flask и FastAPI поддерживаются; приложение должно слушать порт из переменной окружения, а ключи и доступ к базе задаются как секреты, а не в коде.

Где указать токены и другие секретные значения?

В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.

Засыпают ли боты и фоновые скрипты?

Нет, засыпают только сайты: сайт просыпается сам, когда его открывают. Бота и фоновый скрипт разбудить нечем — к ним никто не приходит по ссылке, они работают сами по себе. Поэтому на бесплатном тарифе они работают 3 дня, а дальше, чтобы бот работал круглосуточно, нужен тариф Pro.

Что будет, если приложение упадёт?

Мы следим за проектами и перезапускаем их при сбое. Если что-то идёт не так, вы видите статус и логи в кабинете и получаете уведомление.

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога