最受欢迎主题: Multilogin X, Multilogin 6,
在 Docker 容器中运行Multilogin
目录
我们将在本文介绍如何在Docker容器内运行Multilogin X软件。通过Docker可以打包并在不同环境上部署应用,轻松对应用进行测试。
您将在本文学习如何通过Docker在您的本地电脑,云环境或者任何其他支持Docker的平台上去运行Multilogin X,为您的自动化项目提供更多便利性。Multilogin X支持无头模式,并且可以在远端主机运行。
开始之前
- 根据操作系统和官方指南安装Docker:
- 下载、安装并连接Agent;
- 下载Python和基础的自动化组件。
运行脚本
您需要Dockerfile、entrypoin和自动化脚本文件才能够运行如下示例代码。
Dockerfile文件
Dockerfile是一个包含用于组合映像的命令的文本文档。 可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
- 安装需要的依赖模块
示例
FROM ubuntu:22.04 AS base
# Install basic 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/*
请确保安装兼容的基础镜像和所有的依赖包。基于旧的libc6库的的Ubuntu 20.04和之后的Linux发行版与Multilogin X不兼容。
- 设置虚拟显示器
大部分应用需要用户图形界面才可以进行交互,Multilogin亦是如此。默认情况下,容器没有图形界面,因此我们需要再在无头模式下运行自动化任务。您不需要传统的GNOME或KDE桌面环境——只需虚拟环境即可。
为此,您需要使用Xvfb(X Virtual Frame Buffer)。Xvfb模拟的是不依赖显示界面,或者视窗系统的轻量显示设备,因此对无头模式十分友好。
运行以下指令设置虚拟显示器:
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/
- 容器运行后指定需要运行entrypoint.sh文件。
ENTRYPOINT ["/entrypoint.sh"]
Entrypoint文件
Entrypoint文件是指定Docker如何启动容器内部应用的脚本,entrypoint文件确保了容器内的引用可以正常运行。
- 在后台启用虚拟显示器
- 通过快捷方式“mlx”开启Multilogin X的Launcher
- 等待Launcher更新
- 更换自动化脚本路径
- 启动自动化脚本
#!/bin/bash
# Start virtual display
Xvfb :99 -screen 0 1024x768x24 &
# Start Multilogin launcher
mlx &
# Wait for a while so the launcher is properly installed
sleep 20
# Run Python automation script
cd /app/mlx-app && python3 main.py
自动化脚本
自动化脚本通过通过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 daemon已经运行,然后在您的Docker文件路径内执行以下命令:
docker build -t mlx-image .
通过如下命令运行容器:
docker run -it --name my_mlx_container mlx-image