Selenium Grid Docker部署+PythonDemo+配置解析

一、Selenium简介

Selenium 包含 3 大组件,Selenium IDE、Selenium WebDriver、Selenium Grid。

Selenium IDE:负责录制、回放脚本,模拟用户对页面的真实操作。

Selenium WebDriver:提供 API 来操作浏览器。

Selenium Grid:用于分布式自动化测试,可以控制多台机器、多个浏览器并行执行测试用例。

二、Selenium Grid Docker部署

先在服务器安装好docker服务,并建议设置好国内加速器(我用的是阿里)。

由于docker需要开启端口映射,所以服务器需要启用ipv4转发:

vim /etc/sysctl.conf

#添加以下配置

net.ipv4.ip_forward=1

#重启网络服务

systemctl restart network

#查看结果为1表示已开启

sysctl net.ipv4.ip_forward

(一)同一主机内部署Selenium Grid

互联网环境下

1. 创建网络

docker network create grid

2. 创建hub容器(若不指定版本此过程会pull最新版本镜像并进行装载)

docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub

3. 创建node容器

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 \ 
   --name selenium-node-chrme1 selenium/node-chrome

若需多个node,可重复执行以上命令,修改--name即可。

4. 查看镜像

5. 查看容器运行状态

6. 查看控制台

地址:http://IP地址:4444/ui/index.html#/

Selenium Grid Docker部署+PythonDemo+配置解析_第1张图片

内网环境下

1. 在有互联网环境且安装docker的主机上pull镜像(若不指定版本则自动下载最新版本)

docker pull selenium/hub

docker pull selenium/node-chrome

docker images #查看到下载到本地的镜像。

2. 导出镜像

docker save -o node.tar selenium/node-chrome:latest

docker save -o hub.tar selenium/hub:latest

3. 将导出的tar上传到内网目标主机后进行导入

docker load -i node.tar

docker load -i hub.tar

4. 重复如上互联网环境下操作即可

(二)在多台主机搭建Selenium Grid

Hub 和 Nodes 将创建在不同的机器/VM 上,它们需要知道彼此的 IP才能正常通信。如果多个节点将在同一机器/VM 上运行,则必须将它们配置为公开不同的端口。

在多台主机搭建与在同一主机内搭建Selenium集群步骤相似,只是在创建容器时参数不同。

1. 在主机A创建hub容器

docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub

2. 在主机B创建node容器1

docker run -d -p 5555:5555 \
    --shm-size="2g" \
    -e SE_EVENT_BUS_HOST=主机A的IP地址 \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    -e SE_NODE_HOST=主机B的IP地址 \
    -e SE_NODE_PORT=5555 \
    selenium/node-chrome

3. 在主机B创建node容器2(需要修改容器2监听端口,避免冲突)

docker run -d -p 5556:5556 \
    --shm-size="2g" \
    -e SE_EVENT_BUS_HOST=主机A的IP地址 \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    -e SE_NODE_HOST=主机B的IP地址 \
    -e SE_NODE_PORT=5556 \
    selenium/node-chrome

(三) 使用docker-compose

在有docker-compose的机器也可使用更简便的启动selenium grid。

# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3.yml down`
version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.1.2-20220317
    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

  edge:
    image: selenium/node-edge:4.1.2-20220317
    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

  firefox:
    image: selenium/node-firefox:4.1.2-20220317
    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

  selenium-hub:
    image: selenium/hub:4.1.2-20220317
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

docker-compose up -d即可

三、使用Python调用Selenium Grid

1. Python服务器环境准备

我这里使用的Selenium 4.1版本,要求Python版本3.7+

python下载地址:Download Python | Python.org

下载后自行安装即可。

2.在Python服务器安装Selenium client webdirver模块

Selenium客户端驱动支持多种浏览器/驱动程序(Firefox、Chrome、Internet Explorer)以及远程协议。

若服务器可以访问互联网,可以使用pip进行安装

pip install selenium

若服务器无法访问互联网,可在有互联网的机器pip download下载,在内网主机pip进行安装即可。

或者在有互联网的同版本操作系统中将python环境准备好后,把python目录打包放到内网主机。

3. Selenium通过驱动程序与所选浏览器交互

若不使用Selenium Grid,而是通过selenium webdirver来调用本地浏览器,则需要在本机安装浏览器驱动程序。主流浏览器驱动程序下载地址如下表:

Chrome:

ChromeDriver - WebDriver for Chrome - Downloads

Edge:

Microsoft Edge WebDriver - Microsoft Edge Developer

Firefox:

Releases · mozilla/geckodriver · GitHub

Safari:

WebDriver Support in Safari 10 | WebKit

下载完成后解压,将驱动程序放到$PATH中,如/usr/bin或/usr/local/bin。

unzip chromedriver_linux64.zip

mv chromedriver /usr/bin

windows同理。

若使用docker版本Selenium Grid,则不需要准备浏览器驱动程序,Selenium Grid镜像中已准备好对应的浏览器驱动程序。

4. python调用Selenium Grid代码示例

seleniumdemo.py示例:

#coding=utf-8
from selenium import webdriver

selenium_grid_url = "http://XXXXXXXXXXXX:4444/wd/hub"
CHROME= {"browserName": "chrome"}
browser = webdriver.Remote(desired_capabilities=CHROME,command_executor=selenium_grid_url)
browser.get("http://fanyi.baidu.com")
browser.find_element_by_id("baidu_translate_input").send_keys("hello world")
print(browser.current_url)
browser.get_screenshot_as_file(r"/tmp/chrome.png")
browser.quit()

启动 python demo

python3 seleniumdemo.py

可以在控制台看到正在执行任务

Selenium Grid Docker部署+PythonDemo+配置解析_第2张图片

 执行完成后,可以查看截图如下(demo里没有写关闭提示框,但实际已经翻译了的):

Selenium Grid Docker部署+PythonDemo+配置解析_第3张图片

四、 VCN、noVNC

在浏览器执行过程中,我们可以远程进行观看与调试,selenium提供了VCN客户端与浏览器两种远程方式。

(一)使用VNC客户端连接方式

VNC服务器默认监听端口为5900,在启动容器时需要添加参数-p 5900:5900将内部端口5900映射到外部端口。

然后就可以使用VNC客户端进行连接,默认密码为secret。

Selenium Grid Docker部署+PythonDemo+配置解析_第4张图片

 (二)使用浏览器(noVNC)

NoVNC服务器默认监听端口为7900,在启动容器时需要添加参数-p 7900:7900将内部端口7900映射到外部端口。

然后就可以使用浏览器进行连接,默认密码为secret。

Selenium Grid Docker部署+PythonDemo+配置解析_第5张图片

五、配置解析

--shm-size="2g" ,/dev/shm分区大小,默认64MB,官方建议配置为2GB

-e SE_EVENT_BUS_HOST= ,hub服务器地址 -e SE_EVENT_BUS_PUBLISH_PORT= , hub服务器的发布端口 -e SE_EVENT_BUS_SUBSCRIBE_PORT= , hub服务器的发布端口 -e SE_NODE_HOST= ,node服务器主机

-e SE_NODE_PORT= ,node服务器端口

-e SCREEN_WIDTH= ,屏幕分辨率宽度

-e SCREEN_HEIGHT= ,屏幕分辨率高度

-e SCREEN_DEPTH= ,颜色深度

-e SCREEN_DPI= ,屏幕DPI

-e START_XVFB=false , 以无头模式运行

-e SE_SESSION_REQUEST_TIMEOUT=, 请求队列超时时间

-e SE_SESSION_RETRY_INTERVAL= ,请求队列重试时间

-e SE_NODE_MAX_SESSIONS = ,调整node容器内最大session数,默认为1,若输入数值超过cpu核数,此值会自动设置为cpu核数,若想解除受cpu核心数限制,需要添加以下参数

-e SE_NODE_OVERRIDE_MAX_SESSIONS=true,解除sessions最大限制

参考文章:

Docker-Selenium Github 地址: GitHub - SeleniumHQ/docker-selenium: Docker images for the Selenium Grid Server

Selenium Github地址:GitHub - SeleniumHQ/selenium: A browser automation framework and ecosystem.

Selenium 客户端驱动官方文档:Selenium Client Driver — Selenium 4.1.0 documentation

Selenium API文档:Selenium Documentation — Selenium 4.1.0 documentation

你可能感兴趣的:(python,python,运维)