• 巡检自动化=selenium+截图+接口


    巡检自动化

    一、应用自动化

    网页应用方面

    分为三步:第一步实现网页自动化打开,登录到需巡检的界面,第二步通过截图,保存巡检时状态图,第三步通过接口推送至手机app如企业微信,钉钉等。

    网页自动化

    准备

    第一:selenium环境部署和定位学习:https://blog.csdn.net/qq_54219272/article/details/123310772
    第二:selenium使用:https://blog.csdn.net/qq_54219272/article/details/123338773
    第三:快速下载vscode:
    https://blog.csdn.net/thlchina/article/details/113940283
    补充:
    Microsoft Edge浏览器驱动安装:打开文件所在位置,可以直接看到版本,再到https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver下载对应驱动(接近版本号即可)

    打开网页

    需要提前完成两步:
    第一步:完成python、selenium环境部署
    第二步:完成浏览器驱动安装
    详见:https://blog.csdn.net/qq_54219272/article/details/123310772

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('https://www.bilibili.com/')
    
    # 4、操作命令插入到这里
    
    # 5、时间轴看效果,等待3秒
    sleep(3)
    
    # 6、关闭页面
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    截图

    使用方法:

    driver.get_screenshot_as_file(imgepath)
    #参数:
    # imagepath:为图片要保存的目录地址及文件名称
    #截图方法,建议使用png格式 , ./为当前路径,  ../为上一级路径,如('./info.png')
    
    • 1
    • 2
    • 3
    • 4

    加入到代码中

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('https://www.bilibili.com/')
    
    # 4、操作命令插入到这里
    # 4.1、截图
    driver.get_screenshot_as_file('./a.png')
    # 5、时间轴看效果
    sleep(3)
    
    # 6、关闭页面
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    接口推送

    企业微信接口文档

    图片

    在这里插入图片描述

    import requests
    import base64
    import hashlib
    
    # 图片base64码
    with open("./a.png", "rb") as f:
        base64_data = base64.b64encode(f.read()).decode()
    # base64.b64decode(base64data)
    print(base64_data)
    
    # 图片的md5值
    file = open("./a.png", "rb")
    md = hashlib.md5()
    md.update(file.read())
    res1 = md.hexdigest()
    print(res1)
    
    # 企业微信机器人发送消息
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=f6e7fcfd-ef6c-4145-88ee-3d2eeb3ccXXX"
    headers = {"Content-Type": "text/plain"}
    data = {
        "msgtype": "image",
        "image": {
            "base64": base64_data,
            "md5": res1
        }
    }
    r = requests.post(url, headers=headers, json=data)
    print(r.text)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    插曲:出现如下报错【TypeError:Object of type bytes is not JSON】
    在这里插入图片描述
    解决方法如下:添加了.decode()
    在这里插入图片描述

    借鉴的文章:https://blog.csdn.net/xyl342300/article/details/109954038,不要轻易运行,不然很容易尴尬

    插曲2:
    在这里插入图片描述
    谷歌浏览器的驱动有问题,重装新版的谷歌浏览器就可以解决,下载对应的驱动

    插曲3:
    在这里插入图片描述
    将谷歌浏览器的驱动放到python的目录下解决

    文本

    通过企业微信接口文档-发送文本写出data={ }部分的信息

    import requests
    
    # 10、企业微信机器人发送消息:文本消息
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1bd9d632-1f3b-445d-98e8-429a1d7415ca"
    headers = {"Content-Type": "text/plain"}   
    data = {
        "msgtype": "text",
        "text": {
            "content" : "监控平台界面:正常标准为无异常告警"
        }
    }
    r = requests.post(url, headers=headers)
    
    print(r.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    存在报错
    在这里插入图片描述
    查询后得知

    import requests
    # 10、企业微信机器人发送消息:文本消息
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1bd9d632-1f3b-445d-98e8-429a1d7415xx"
    headers = {"Content-Type": "text/plain"}   
    data = {
        "msgtype": "text",
        "text": {
            "content" : "监控平台界面:正常标准为无异常告警"
        }
    }
    r = requests.post(url,headers=headers,json=data,verify=False)#企业微信群机器人的消息虽然是“text”类型的,但是post发送过去的头部是“application/json”,是json格式的
    print(r.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    成功发送
    在这里插入图片描述

    启动脚本

    一、bat写法

    @C:\Users\18826\AppData\Local\Programs\Python\Python38\python.exe C:\Users\18826\Desktop\patrol\renwu.py %*
    
    • 1

    上述路径是自身py所在的文件夹决定的,如下图
    在这里插入图片描述

    二、window自带的定时任务,需要注意以下更改点
    在这里插入图片描述

    遇到问题
    1. 执行后报错
      在这里插入图片描述
      解决方法
      在这里插入图片描述

    以上满足常规巡检


    以下是对维格表尝试登录,但是失败的案例

    网页操作

    若需对网页进行操作,需学习:
    1、利用元素定位进行网页操作
    2、了解浏览器、键盘、鼠标操作
    详见:https://developer.work.weixin.qq.com/tutorial/detail/54

    常用命令如下:

    driver.maximize_window()  # 最大化浏览器
    
    
    • 1
    • 2

    加入到代码中

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('https://www.bilibili.com/')
    
    # 4、操作命令插入到这里
    # 4.1、截图
    driver.maximize_window()  # 最大化浏览器
    
    # 5、时间轴看效果
    sleep(3)
    
    # 6、关闭页面
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    账号密码

    此处引入登录维格表,截图发群里通知人执行工作

    插曲1:
    在这里插入图片描述
    4.4.3版本无法使用_by_命令,改成4.1.0

    pip uninstall selenim
    pip install selenim==4.1.0

    在这里插入图片描述
    插曲2:无法定位元素的报错
    在这里插入图片描述
    是由于账号密码界面需要切换,引入鼠标点击

    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN"]/div[1]/div/button/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    顺利切换到如下界面
    在这里插入图片描述
    再通过元素定位法
    在这里插入图片描述

    # 5.4、输入账号密码
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PHONE_INPUT"]')
    ele.send_keys('18826227807')
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PASSWORD_INPUT"]')
    ele.send_keys('Stqer686')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最后,点击确认
    在这里插入图片描述

    # 5.5、点击
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN"]/div[1]/div/button/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    但是,最后维格表有防范机制,点击确认后,还是不算登录成功,哭哭

    整体代码

    巡检

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('http://172.16.1.33:3000/d/WojOgXTmk/00-gao-jing-zhong-xin?orgId=1&refresh=5s')
    
    # 4、时间轴看效果
    sleep(6)
    
    # 5、操作命令插入到这里
    driver.get_screenshot_as_file('./a.png')  #截图
    driver.maximize_window()  # 最大化浏览器
    
    
    # 6、关闭页面
    driver.quit()
    
    import requests
    import base64
    import hashlib
    
    # 7、图片base64码:提供给企业微信发送图片信息所需
    with open("./a.png", "rb") as f:
        base64_data = base64.b64encode(f.read()).decode()
    # base64.b64decode(base64data)
    print(base64_data)
    
    # 8、图片的md5值
    file = open("./a.png", "rb")
    md = hashlib.md5()
    md.update(file.read())
    res1 = md.hexdigest()
    print(res1)
    
    # 9、企业微信机器人发送消息:提供给企业微信发送图片信息所需
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1bd9d632-1f3b-445d-98e8-429a1d7415xx"
    headers = {"Content-Type": "text/plain"}
    data = {
        "msgtype": "image",
        "image": {
            "base64": base64_data,
            "md5": res1
        }
    }
    r = requests.post(url, headers=headers, json=data)
    print(r.text)
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    维格表

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('https://vika.cn/workbench/mirPTLa3fERa5Vt3Jt/dstyWW2rd6RgoKBxml/viwPVtNmkrHSC')
    
    # 4、时间轴看效果
    sleep(5)
    
    # 5、操作命令插入到这里
    # 5.1、最大化
    driver.maximize_window()  # 最大化浏览器
    # 5.2、截图
    driver.get_screenshot_as_file('./a.png') 
    # 5.3、鼠标单击切换到账号密码登录界面
    # 5.3.1、点击“手机/邮件登录”按钮
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN"]/div[1]/div/button/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    # 5.3.2、点击“密码登录”按钮
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_CHANGE_MODE_BTN"]/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    # 5.4、输入账号密码
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PHONE_INPUT"]')
    ele.send_keys('18826227807')
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PASSWORD_INPUT"]')
    ele.send_keys('Stqer686')
    # 5.5、点击“确认”按钮
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN"]/div[1]/div/button/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    # 6、时间轴看效果
    sleep(20)
    
    
    # 7、关闭页面
    driver.quit()
    
    import requests
    import base64
    import hashlib
    
    # 8、图片base64码:提供给企业微信发送图片信息所需
    with open("./a.png", "rb") as f:
        base64_data = base64.b64encode(f.read()).decode()
    # base64.b64decode(base64data)
    print(base64_data)
    
    # 9、图片的md5值
    file = open("./a.png", "rb")
    md = hashlib.md5()
    md.update(file.read())
    res1 = md.hexdigest()
    print(res1)
    
    # 10、企业微信机器人发送消息:提供给企业微信发送图片信息所需
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1bd9d632-1f3b-445d-98e8-429a1d7415ca"
    headers = {"Content-Type": "text/plain"}
    data = {
        "msgtype": "image",
        "image": {
            "base64": base64_data,
            "md5": res1
        }
    }
    r = requests.post(url, headers=headers, json=data)
    print(r.text)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
  • 相关阅读:
    【leetcode热题】分割回文串 II
    计算机专业毕业论文java毕业设计网站SSM学生信息管理系统[包运行成功]
    基于Velero1.8.1+Minio实现备份恢复K8s集群
    BLOB, TEXT, GEOMETRY or JSON column ‘xxxx‘ can‘t have a default value
    将Helm编写的Chart推送到Harbor仓库
    Pytorch数据集读出到transform全过程
    从查询重写角度理解elasticsearch的高亮原理
    SMBGhost漏洞技术分析与防御方案
    “==”和equals的区别
    NLP中基于Bert的数据预处理
  • 原文地址:https://blog.csdn.net/stqer/article/details/126393648