docker部署web自动化工具 —— selenium
引用官方的一段话
Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。
它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现 W3C WebDriver 规范 的基础结构, 该 规范 允许您为所有主要 Web 浏览器编写可互换的代码。
Selenium 的核心是 WebDriver,这是一个编写指令集的接口,可以在许多浏览器中互换运行。
独立模式
部分docker-compose
  chrome:
#    selenium/standalone-firefox:4.1.4-20220427
#    selenium/standalone-edge:4.1.4-20220427
    image: selenium/standalone-chrome:4.1.4-20220427
    shm_size: 2gb
    container_name: standalone-chrome
    ports:
      - "4444:4444"
      - "7900:7900"
      - "5900:5900"
    environment:
      - VNC_VIEW_ONLY=1 #查看模式
      - VNC_NO_PASSWORD=1 #取消密码验证
Hub + Nodes模式
部分docker-compose
  selenium-hub:
    image: selenium/hub:4.1.4-20220427
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"
  chrome:
#    selenium/node-edge:4.1.4-20220427
#    selenium/node-firefox:4.1.4-20220427
    image: selenium/node-chrome:4.1.4-20220427
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - VNC_VIEW_ONLY=1 #查看模式
      - VNC_NO_PASSWORD=1 #取消密码验证
    ports:
      - "7900:7900"
      - "5900:5900"
视频录制
可以使用selenium/video:ffmpeg-4.3.1-20220427 Docker 映像记录测试执行情况。每个运行浏览器的容器都需要一个容器。
- 不支持无头浏览器的视频录制。
- 停止并删除容器后,您应该会在机器的./videos目录上看到一个视频文件。
部分docker-compose
  chrome_video:
    image: selenium/video:ffmpeg-4.3.1-20220427
    volumes:
      - ./videos:/videos
    depends_on:
      - chrome
    environment:
      - DISPLAY_CONTAINER_NAME=chrome
      - FILE_NAME=chrome_video.mp4
启动服务
docker-compose up -d
常用链接
Hub 控制台
http://localhost:4444/grid/console
节点状态
http://localhost:4444/wd/hub/status
要查看容器内发生的情况,请访问
http://localhost:7900
密码:secret
调试
该项目使用 x11vnc 作为 VNC 服务器,以允许用户检查容器内发生的情况。用户可以通过两种方式连接到该服务器
如果您收到要求输入密码的提示,它是:secret
使用 VNC 客户端
全平台支持:Windows、macOS、Linux、Raspberry Pi、iOS、Android、Solaris、HP-UX、AIX
连接localhost:5900,如下

使用浏览器(不需要 VNC 客户端)
连接http://localhost:7900/,如下

测试脚本
Selenium 支持很多语言:Java、Python、CSharp、Ruby、JavaScript、Kotlin
下面以JavaScript和Python为例,写一个截屏的小demo
详见:https://github.com/chudaozhe/docker-selenium/tree/master/examples
代码
https://github.com/chudaozhe/docker-selenium
参考
https://github.com/SeleniumHQ/docker-selenium
脚本例子 https://github.com/SeleniumHQ/seleniumhq.github.io/tree/trunk/examples
