产品文档 - SeleniumHQ / docker-selenium
https://github.com/SeleniumHQ/docker-selenium
产品文档 - Selenium Grid 4
https://www.selenium.dev/documentation/grid/
产品文档 - selenium
https://www.selenium.dev/documentation/
docker-compose up -d --scale chrome=num //num是要启动节点的数量,chrome是docker-compose文件中节点的名称
没有密码验证的情况下运行 VNC
仅查看模式下运行 VNC
节点配置选项: 告诉节点事件总线在哪里,以便它可以注册自己。
增加每个容器的会话并发性
来使用主机的共享内存,防止容器崩溃,这是避免浏览器在 docker 容器内崩溃的已知解决方法,这里是 Chrome和Firefox的记录问题。2gb 的 shm 大小是任意的,但已知效果很好,您的特定用例可能需要不同的值,建议根据您的需要调整此值。
注意:mkdir /home/ubuntu/files
chown 1200:1201 /home/ubuntu/files
挂载数据卷前操作
可以通过将环境变量传递给容器来增加日志输出
所有输出都发送到标准输出,因此可以通过运行检查
告诉节点事件总线在哪里,以便它可以注册自己。
设置屏幕分辨率
网格 URL 和会话超时,默认300秒
超时为 500 秒
重试间隔为 2 秒
启用视频录制
以无头模式运行,默认是true
docker-selenium 项目使用的是 x11vnc 作为 VNC 服务器
VNC (Virtual Network Console) 是虚拟网络控制台的缩写。它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。
VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。x11vnc 允许人们使用任何VNC 查看器远程查看并与真实的X 显示器(即对应于物理监视器、键盘和鼠标的显示器)进行交互。通过这种方式,它扮演了 WinVNC 为 Windows 扮演的角色,适用于 Unix/X11
在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。
我们这里使用了其中的两个命令:vncserver【容器里面使用的是这个】 和 vncviewer【VNC客户端】。
谷歌:docker run -d -p 4444:4444 -p 5900:5900 --shm-size=2g selenium/standalone-chrome:4.1.2-20220131
火狐:docker run -d -p 4444:4444 -p 5902:5900 --shm-size=2g selenium/standalone-firefox:4.1.2-20220131
edge:docker run -d -p 4444:4444 -p 5901:5900 --shm-size=2g selenium/standalone-edge:4.1.2-20220131
浏览器访问容器内部,原理是通过: noVNC
noVNC 既是 HTML VNC 客户端 JavaScript 库,又是构建在该库之上的应用程序,可以用来访问容器内部,默认端口是7900
noVNC 在任何现代浏览器中都能很好地运行,包括移动浏览器(iOS 和 Android)
docker run -d -p 4444:4444 -p 7900:7900 --shm-size=“2g” selenium/standalone-chrome:4.1.2-20220131
docker run -d -p 4444:4444 -p 7901:7900 --shm-size=“2g” selenium/standalone-edge:4.1.2-20220131
docker run -d -p 4444:4444 -p 7902:7900 --shm-size=“2g” selenium/standalone-firefox:4.1.2-20220131
http://localhost:7900/ 连接到 Chrome 容器
http://localhost:7901/ 连接到 the Edge 容器
http://localhost:7902/ 连接到 the Firefox 容器
1、创建docker网络:docker network create grid
2、创建hub集线器:docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.1.2-20220131
3、创建node节点1:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-chrome:4.1.2-20220131
4、创建node节点2:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-edge:4.1.2-20220131
5、创建node节点3:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-firefox:4.1.2-20220131
6、使用完成后,删除容器:docker rm 容器id,删除网格:docker network rm grid
version: "3"
services:
chrome:
image: selenium/node-chrome:4.1.2-20220208
shm_size: 2gb
depends_on:
- selenium-hub
ports:
- "7901:7900"
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_SESSION_TIMEOUT=350
- SE_NODE_MAX_SESSIONS=10
edge:
image: selenium/node-edge:4.1.2-20220208
shm_size: 2gb
depends_on:
- selenium-hub
ports:
- "7902:7900"
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_SESSION_TIMEOUT=350
- SE_NODE_MAX_SESSIONS=5
firefox:
image: selenium/node-firefox:4.1.2-20220208
shm_size: 2gb
depends_on:
- selenium-hub
ports:
- "7903:7900"
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_SESSION_TIMEOUT=350
- SE_NODE_MAX_SESSIONS=8
selenium-hub:
image: selenium/hub:4.1.2-20220208
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
-f:指定yml文件
up:启动容器
-d:后台启动
[默认使用谷歌]
–server=ip --port=4444:部署 selenium grid 的ip
–locale=zh_cn:启动的浏览器默认是中文语言
-n = 3:分布式运行用例
谷歌:http://ip:7901
edge:http://ip:7902
火狐:http://ip:7903
docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.1.2-20220131
docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST=机器2IP selenium/node-chrome:4.1.2-20220131
docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST =机器3IP selenium/node-edge:4.1.2-20220131
docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST =机器4IP selenium/node-firefox:4.1.2-20220131