在自动化测试或爬虫部署过程中,我们经常需要将 Selenium 脚本部署在服务器上运行。为了提升效率与可移植性,推荐采用无头浏览器 + Docker 容器化部署的方式。


🎯 为什么要用无头浏览器?

无头(headless)模式 是指不打开浏览器 GUI 窗口,直接在后台运行浏览器,适合:

  • CI/CD 自动化测试
  • 云服务器部署(如 Linux 无桌面环境)
  • 提高运行效率、避免界面干扰

✅ 一、配置无头浏览器(以 Chrome 为例)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')         # 无头
options.add_argument('--disable-gpu')      # 兼容性
options.add_argument('--no-sandbox')       # Docker 中必须加
options.add_argument('--disable-dev-shm-usage')  # 共享内存限制

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
print(driver.title)
driver.quit()

📌 --no-sandbox--disable-dev-shm-usage 是在 Docker 运行中必须加的参数。


🐳 二、使用 Docker 封装运行环境

如果你希望在云服务器或 CI 中运行 Selenium 脚本,建议使用 Docker 容器化。

📦 创建 Dockerfile

FROM python:3.10-slim

# 安装依赖
RUN apt-get update && apt-get install -y \
    wget unzip curl gnupg \
    chromium-driver chromium \
    && rm -rf /var/lib/apt/lists/*

# 安装 Python 依赖
COPY requirements.txt .
RUN pip install -r requirements.txt

# 拷贝代码
COPY . /app
WORKDIR /app

CMD ["python", "main.py"]

📄 requirements.txt 示例

selenium==4.16.0

🏗 构建 & 运行

docker build -t selenium-headless .
docker run --rm selenium-headless

🧪 示例项目结构

project/
├── Dockerfile
├── requirements.txt
├── main.py

🛠 main.py 示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()

🔧 注意事项(生产环境踩坑)

问题 说明
DevToolsActivePort 报错 缺少 --no-sandbox 参数
session not created 浏览器和驱动版本不一致
selenium.common.exceptions.WebDriverException Docker 中未安装正确的 Chromium
页面空白 忘了加 --disable-dev-shm-usage,共享内存不足

🧼 小结

  • 无头浏览器可让自动化脚本在服务器、CI 中高效运行
  • Docker 化让脚本环境可移植、易部署、易集成
  • 强烈建议在实际项目中将 Selenium + Docker 联用

📌 延伸阅读:

  • 使用 ChromeDriver + Chrome 完整版本兼容性分析
  • 如何与 Jenkins 集成运行无头脚本
  • Selenium Grid + Docker 分布式自动化部署

添加微信