Selenium 包含 3 大组件,Selenium IDE、Selenium WebDriver、Selenium Grid。
Selenium IDE:负责录制、回放脚本,模拟用户对页面的真实操作。
Selenium WebDriver:提供 API 来操作浏览器。
Selenium Grid:用于分布式自动化测试,可以控制多台机器、多个浏览器并行执行测试用例。
此文用的就是Docker版Selenium Grid,用的环境是:服务器CentOS8.2。
Selenium Grid Docker
官方文档:https://github.com/SeleniumHQ/docker-selenium/blob/trunk/README.md
一、pull需要的docker镜像
使用到两个镜像:
1 | docker pull selenium/hub |
selenium/node-chrome 是无界面的。
拉取完镜像后,可以用 docker images
查看所有镜像。
要想能看到实时运行界面,需要pull以下镜像:
1 | docker pull selenium/standalone-chrome-debug |
二、创建容器
1.创建一个新的 Docker 网络
1 | docker network create my-grid |
可以通过 docker network ls
命令查看结果。
1.Hub节点的容器
1 | docker run -d -p 4442-4444:4442-4444 --net my-grid --name selen-hub selenium/hub |
2.Node节点的容器
1 | docker run -d --net my-grid -e SE_EVENT_BUS_HOST=selen-hub \ |
5900 端口是给VNC客户端用的
7900 端口是给noVNC用的
容器可以通过 docker ps -a
命令查看 。
服务起来了,可以在浏览器中查看(我的服务器ip为:43.142.94.65):
http://43.142.94.65:4444
结果如下:
点开版本号上面的1,可以看到有如下信息(这些信息有用的,记一下,代码里会用到这些参数):
1 | {"browserName":"chrome","browserVersion":"102.0","platformName":"Linux","se:noVncPort":7900,"se:vncEnabled":true} |
3. 使用docker-compose创建
如果不想用上面这种依次创建容器的方法,就直接用docker-compose一起创建(内容对照上面的一样的)。
docker-compose.yml 文件模板如下(Github上也有模板):
1 | # To execute this docker-compose yml file use `docker-compose -f docker-compose-v3.yml up` |
把docker-compose.yml 文件上传到服务器,然后进入文件所在目录下,执行以下命令运行容器:
1 | docker-compose up -d |
-d :后台运行
如果文件名没用默认的 docker-compose.yml,就参考上面的提示,加上-f 的文件参数就行:
1 | docker-compose -f docker-compose-v3.yml up -d |
执行完后,通过docker ps -a
查看容器列表,如图所示,添加了3个容器(容器需要加name的,自己添加一下container_name参数;还有个firefox不需要的就删除或者注释掉就行。):
要删除这些容器也简单,可以一键删除:
1 | docker-compose -f docker-compose-v3.yml down |
三、使用Python调用Selenium Grid
这反正跟平常的Selenium WebDriver一样的,参考之前的文章:Python Selenium使用举例
主要就是开头设置有些不一样。这里就需要用到 http://43.142.94.65:4444 运行后的这些信息。
1 | {"browserName":"chrome","browserVersion":"102.0","platformName":"Linux","se:noVncPort":7900,"se:vncEnabled":true} |
代码举例(test.py):
1 | #!/usr/bin/env python |
用命令运行这个Python文件,python test.py
就可以看到运行结果了。也可以用下面远程观看的方式看到运行过程。
四、远程观看
Selenium 提示VNC客户端和浏览器两种远程方法。
1.VNC客户端
vnc viewer是一款优秀的远程控制工具软件。
官网下载地址:https://www.realvnc.com/en/connect/download/viewer/
安装好以后 File->New connection,在弹出的界面中输入node的ip和端口号(比如我这就是43.142.94.65:5900,Name随意),保存后双击启动。
连接,会要求输入密码,默认密码:secret
连接上后,再运行Python selenium的代码,就能看到运行过程了。(结果就像上面那张图一样)
2.使用浏览器(noVNC)
我的服务器ip为:43.142.94.65,映射出来的端口也是7900,那打开地址就是:
http://43.142.94.65:7900/vnc.html
默认密码:secret
效果跟上面也是一样的。
PS.注意服务器防火墙设置里这几个用到的端口开一下。(docker-compose.yml 文件里那些个端口)
小结的话
有了这些可以做些什么呢?
加上前面一篇文章:服务器 Docker搭建Flask应用(一),就在服务器上用Docker创建了3个容器,分别是:
- Flask应用的容器
- selenium hub的容器
- selenium node-chrome的容器
这样就可以在Flask应用的容器中,代码用selenium爬取数据,写一个get接口,返回json数据;或者做自动化测试。
- 本文标题:Docker版Selenium使用方法
- 本文作者:HDUZN
- 创建时间:2022-05-29 00:19:31
- 本文链接:http://hduzn.cn/2022/05/29/Docker版Selenium使用方法/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!