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