docker+selnium grid+python+VNC实现多线程UI自动化(安装教程二)

准备工作

所有的操作都是在docker 里面进行

  • docker
  • selnium grid
  • python
  • VNC (密码secret)
  • selenium/standalone-chrome (一个独立系统)
  • selenium/node-chrome (节点 7900连接网页版vnc )
  • selenium/hub (主要节点)

开始

selenium/hub

docker network create grid  创建专用网络,下面所有的node  hub 都要加入这个网络
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest  
-v  挂载命令,主要针对一些文件上传,本地没有文件就建,服务没有人家会自己这建立的。 注意【node1】,如果想多线程进行,就把node 改成node2,重新复制代码在开一个容器,就可以多线程操作了 -p 7900:7900 是为了能访问novnc
docker run -d  -p:7900:7900 -v D:\img:/home/img --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 node1  selenium/node-chrome

连接vnc/ novnc

novnc  网页版,novnc 必须开放7900端口
http://localhost:7900/?autoconnect=1&resize=scale&password=secret.

连接多个 novnc

只需要将 在docker 命令中 将电脑端口映射到node 7900 端口就行 例如 :-p 7901:7900

docker run -d  -p:7901:7900 -v D:\img:/home/img --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 node1  selenium/node-chrome

结果如下:
在这里插入图片描述

地址如下: 请直接下载view ,不用下载服务server

https://www.realvnc.com/en/connect/download/viewe

** 密码:secret**

**再次注意,下面客户端VNC是用来连接 selenium/standalone-chrome **

必须是5900端口,因为vnc 的端口是5900
docker run -d -p 4444:4444 -p 5900:5900 --shm-size="2g" selenium/standalone-chrome:latest

登录界面
密码secret

selenium grid

本地如下 浏览器输入localhost:4444 就可以打开 只有一个是因为我只开了一个node,如果要多开只需要多开几个node 就行
在这里插入图片描述

代码运行

多线程代码

class Thread:

    def __init__(self, func, thread_num=1):
        """
        :param func: 任务名称
        :param thread_num: 默认2 只是为了测试后期可以改
        """
        self.thread_num = thread_num
        self.func = func

    def creat_thread_pool(self):
        with ThreadPoolExecutor(max_workers=self.thread_num) as pool:
            worker_list = []
            for workerId in range(self.thread_num):
                # workerId 用来传值给func,区分不同的任务执行不同的脚本文件
                worker_result = pool.submit(self.func, workerId)
                worker_list.append(worker_result)

            # 获得其他线程返回给主线程的结果
            for future in as_completed(worker_list):
                data = future.result()
                print(f"main: {data} tid: {threading.get_ident()}")

启动程序代码

   WIDTH = 320
    HEIGHT = 640
    PIXEL_RATIO = 3.0
    mobileEmulation = {"deviceMetrics": {"width": WIDTH, "height": HEIGHT, "pixelRatio": PIXEL_RATIO}}
    selenium_grid_url = "http://localhost:4444/wd/hub"
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option('mobileEmulation', mobileEmulation)
    driver = webdriver.Remote(options=chrome_options,
                          command_executor=selenium_grid_url)
    driver.get(path)

完毕

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值