最受欢迎主题: Multilogin X, Multilogin 6,
在 Docker 容器中运行Multilogin
在本文中,我们介绍了在 Docker 容器内创建和启动Multilogin X的过程。Docker 允许您以一致且可移植的方式打包和部署应用程序,从而更轻松地在不同环境中进行管理。
通过遵循此处概述的步骤,您可以使用 Docker 在本地计算机、云环境或任何支持 Docker 的系统上运行Multilogin X ,从而为您的 Web 自动化需求提供灵活性和可扩展性。Multilogin Multilogin X支持在无头模式下运行,并且可以在远程主机上运行。
在你开始之前
- 按照您的操作系统的官方安装指南安装 Docker:
- 下载、安装并连接Multilogin X代理
- 安装 Python 和用于基本自动化的库
运行脚本
要运行我们的示例脚本,您将需要一个 Dockerfile、一个入口点文件和一个自动化脚本。
Dockerfile
Dockerfile 是一组用于 Docker 构建映像的指令,类似于为应用程序制作即用型环境的配方。它概述了要包含哪些软件、如何配置它以及要添加哪些文件。
- 安装必要的依赖项
脚本示例
从 ubuntu:22.04 开始
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/*
确保基础映像兼容且所有必要的依赖项均已正确安装。例如,Ubuntu 20.04 和在其基础上构建的Linux发行版具有过时的 libc6 软件包,这意味着它们无法与我们的应用程序正常运行。
- 设置虚拟显示器
许多应用程序需要图形界面来交互。这也适用于浏览器和Multilogin 。默认情况下,容器没有 GUI,因此我们需要为无头自动化设置一个。您不需要安装传统的桌面环境(如 GNOME 或 KDE)——虚拟桌面环境就可以了。
为此,您可以使用Xvfb (X 虚拟帧缓冲区)包。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 .
在运行入口点文件之前,通过添加行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"]
入口点文件
入口点文件是一个脚本或可执行文件,它告诉 Docker 如何启动容器内的应用程序。它们协同工作以确保应用程序在容器中正确且一致地运行。
- 在后台启动虚拟显示
- 使用快捷方式“mlx”在后台启动Multilogin X启动器
- 等待几秒钟让启动器更新
- 将目录更改为自动化脚本所在的目录
- 启动自动化脚本
#!/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 守护程序正在运行,然后在包含 Dockerfile 的目录中执行以下命令:
docker build -t mlx-image .
使用以下命令启动容器:
docker run -it --name my_mlx_container mlx-image