Популярные темы: Multilogin X, Multilogin 6,
Запуск Multilogin в Docker контейнере
В этой статье мы рассмотрели процесс создания и запуска Multilogin X внутри Docker контейнера. Docker позволяет упаковывать и использовать приложение в последовательном и переносимом формате, что упрощает управление в различных средах.
Следуя описанным здесь шагам, вы можете использовать Docker для запуска Multilogin X на своём локальном компьютере, в облачной среде или в любой системе, поддерживающей Docker, обеспечивая гибкость и масштабируемость автоматизации. Multilogin X поддерживает работу в headless режиме и может запускаться на удалённых хостах.
Начало работы
- Установите Docker, следуя официальному руководству по установке для вашей операционной системы:
- Загрузите, установите и подключите агент Multilogin X.
- Установите Python и библиотеки для базовой автоматизации.
Запуск скрипта
Для запуска нашего примера скрипта вам понадобится Dockerfile, файл entrypoint и скрипт автоматизации .
Dockerfile
Dockerfile — это набор инструкций для Docker по созданию образа, очень похожий на рецепт создания готовой к использованию среды для приложения. В нём указано, какое программное обеспечение использовать, как его настроить и какие файлы добавить.
- Установите необходимые зависимости.
Пример скрипта
FROM ubuntu:22.04 AS base
# Install required dependencies
RUN apt-get update && \
apt-get install -y \
xvfb \
ca-certificates \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libatspi2.0-0 \
libc6 \
libcairo2 \
libcups2 \
libcurl4 \
libdbus-1-3 \
libdrm2 \
libexpat1 \
libgbm1 \
libglib2.0-0 \
libgtk-4-1 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libu2f-udev \
libvulkan1 \
libx11-6 \
libxcb1 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
wget \
xdg-utils \
openjdk-18-jre-headless \
jq \
curl \
unzip \
openssh-client \
python3 \
python3-pip \
libayatana-appindicator3-dev && \
pip install requests selenium && \
curl --location --fail --output mlxdeb.deb "https://mlxdists.s3.eu-west-3.amazonaws.com/mlx/1.15.0/multiloginx-amd64.deb" && \
dpkg -i mlxdeb.deb && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
Убедитесь, что базовый образ совместим и все необходимые зависимости установлены правильно. Например, дистрибутивы Ubuntu 20.04 и Linux, построенные на его основе, имеют устаревший пакет libc6 и не будут правильно работать с нашим приложением.
- Настройте виртуальный дисплей.
Многим приложениям для взаимодействия необходим графический интерфейс. Это также относится к браузерам и, соответственно, к Multilogin. По умолчанию контейнеры не имеют графического интерфейса, поэтому нам нужно настроить его для headless автоматизации. Вам не нужно устанавливать обычную среду рабочего стола, такую как GNOME или KDE — подойдёт виртуальная.
Для этого вы можете использовать пакет Xvfb (X Virtual Frame Buffer). Xvfb эмулирует дисплей, который не зависит от физического экрана или оконной системы, что делает его идеальным для headless установок.
Запустите команды ниже, чтобы настроить виртуальный дисплей:
ENV DISPLAY=:99
RUN mkdir /tmp/.X11-unix
RUN chown root:root /tmp/.X11-unix && \
chmod 1777 /tmp/.X11-unix
- Создайте пользователя.
RUN useradd -m mlx-user && \
chown -R mlx-user:mlx-user .
Прежде чем запускать файл entrypoint, переключитесь на этого пользователя, добавив строку USER mlx-user
.
Создание пользователя необходимо, так как автоматизация с правами root невозможна.
- Скопируйте дополнительные файлы и настройте для них разрешения.
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./env.py /app/mlx-app/
COPY ./main.py /app/mlx-app/
COPY ./mlx_functions.py /app/mlx-app/
- Определите файл enterpoint.sh, который будет запускаться после запуска контейнера.
ENTRYPOINT ["/entrypoint.sh"]
Файл entrypoint
Файл entrypoint — это скрипт или исполняемый файл, который сообщает Docker, как запустить приложение внутри контейнера. Вместе они обеспечивают правильную и согласованную работу приложения в контейнере.
- Запустите виртуальный дисплей в фоновом режиме.
- Запустите Multilogin X Launcher в фоновом режиме, используя ярлык «mlx».
- Подождите несколько секунд, пока Launcher обновится.
- Измените директорию на ту, где находится скрипт.
- Запустите скрипт.
#!/bin/bash
# Запустите виртуальный дисплей
Xvfb :99 -screen 0 1024x768x24 &
# Запустите Multilogin Launcher
mlx &
# Подождите несколько секунд, пока Launcher обновится
sleep 20
# Запустите скрипт Python
cd /app/mlx-app && python3 main.py
Скрипт автоматизации
Скрипт автоматизации выполняет базовые задачи скрейпинга с помощью headless браузерных профилей Multilogin X. Написанный на Python, он использует Selenium WebDriver для автоматизации задач.
Скрипт выполняет следующие действия:
- Перейти на конкретный сайт.
- Зарегистрировать название сайта.
- Зарегистрировать количество статей, представленных на странице.
- Зарегистрировать название каждой статьи.
- Завершить процесс автоматизации и сеанс драйвера.
Пример скрипта
def automation(driver): # Automation function
try:
driver.get("https://www.scrapethissite.com/pages/") # Go to this website
print(f'The title of the webpage is: "{driver.title}"\n') # Print the title of the website
articles = driver.find_elements(By.CLASS_NAME, "page")
print(f'There are {len(articles)} different articles on this page:\n') # Print how many articles are there
for i, article in enumerate(articles): # For each article, show us what is the name of the article
article_text = article.find_element(By.TAG_NAME, "a").text
print(f"{i+1}. {article_text}")
print("\nBasic automation finished.\n") # Print that the automation is finished
except Exception as e: # Catch expection if any
print(f"Something happened: {e}") # If any exception, print its details
finally:
driver.quit() # Quit driver session
mlx.stop_profile(quick_profile_id) # Close browser profile
Запуск Docker контейнера
Чтобы создать Docker контейнер, убедитесь, что ваш демон Docker запущен, а затем выполните следующую команду в каталоге, содержащем ваш Dockerfile:
docker build -t mlx-image .
Запустите контейнер с помощью следующей команды:
docker run -it --name my_mlx_container mlx-image