zoukankan      html  css  js  c++  java
  • 华为服务器IBMC批量巡检代码

    selenium需要下载Chrome驱动webdriver,具体下载的版本根据自己的谷歌浏览器版本进行下载,然后
    将下载好的驱动webdriver放到自己python解释器同级目录中即可,下载地址http://npm.taobao.org/mirrors/chromedriver/

    此代码可用于华为服务器批量巡检,前提要在脚本存放的同级目录下建立一个ipList.txt文件存储
    服务器管理IP地址格式为每行一个地址(即imbc的管理地址),脚本将会遍历所有的IP地址,这里的账号密码默认为华为
    服务器的原始账号密码(即Administrator和Admi@9000),如有需要可自行修改代码。
    坑点:服务器登录加载的时候需要等待一段时间,刚开始使用driver.implicitly_wait()函数进
    行隐性等待,发现会有获取数据的值为空值的现象,排查发现是因为华为IBMC界面元素的加载跟数据
    的加载是不同步的,只能选择强制等待time.sleep()的方法了。

    from selenium import webdriver
    import math
    import datetime
    import xlsxwriter
    import time

    # 规定巡检表
    today=str(datetime.date.today())
    workbook=xlsxwriter.Workbook('%s华为巡检报告.xlsx'%today)
    worksheet=workbook.add_worksheet('华为巡检')

    # 巡检项目
    title=[
    U'IP地址',
    U'序列号',
    U'型号',
    U'BMC版本',
    U'BIOS版本',
    U'风扇状态',
    U'电源状态',
    U'磁盘状态',
    U'CPU状态',
    U'RAID状态',
    U'紧急告警数',
    U'严重告警数',
    U'轻微告警数'
    ]

    #写入标题
    worksheet.write_row('A1',title)

    #返回分类列表(供下面函数调用)
    def listCheck(list_tr,*args):
    list=[]
    for i in list_tr:
    for j in args:
    if i.startswith(j):
    list.append(i)
    return list

    #检查分类列表
    def okCheck(list):
    for i in list:
    if i.split(' ')[-7] !='OK':
    return 'NO'
    break
    return 'OK'

    #主程序
    if __name__ == '__main__':
    with open('ipList.txt','r',encoding='utf8') as f:
    iplist=f.readlines()
    rowNum=2
    for ip in iplist:

    # 创建webdriver对象
    driver=webdriver.Chrome()
    #登录华为服务器BMC
    driver.get('https://%s/login.html'%ip)
    driver.find_element_by_id('ipUserName').send_keys('Administrator')
    driver.find_element_by_id('iptPassword').send_keys('Admin@9000')
    time.sleep(1)
    driver.find_element_by_id('btnLogin').click()

    #进入子iframe
    driver.switch_to.frame('rightMid')

    #IP地址
    ipaddr=driver.find_element_by_id('txtBMCIp').text
    #序列号
    xuliehao=driver.find_element_by_id('txtSequence').text
    #型号
    xinghao=driver.find_element_by_id('txtProductNameInfo').text
    # iBMC地址
    ibmc=driver.find_element_by_id('txtBMCFirm').text
    #bios固件版本
    bios=driver.find_element_by_id('txtBiosFirm').text
    # 紧急告警数量
    jinji=driver.find_element_by_id('txtCritalAlarms').text
    #严重告警
    yanzhong=driver.find_element_by_id('txtMajorAlarms').text
    #轻微告警
    qingwei=driver.find_element_by_id('txtMinorAlarms').text

    #返回主Document
    driver.switch_to.default_content()

    #转到另外一个子iframe
    driver.find_element_by_id('menu_SENSOR').click()
    time.sleep(3)
    driver.switch_to.frame('rightMid')

    #获取门限传感器数目
    strr=driver.find_element_by_id('tinyPaginationTotalRecords').text
    num=int(strr[5:])

    #将门限传感器内容写入列表
    list_tr=[]
    for i in range(math.ceil(num/10)): #遍历传感器页数
    for j in driver.find_elements_by_xpath('//*[@id="DataTables_Table_3"]/tbody/tr'):
    list_tr.append(j.text)
    driver.find_element_by_css_selector("[class='ti ti-angle-right']").click()

    #cpu状态
    cpu=okCheck(listCheck(list_tr,'CPU'))
    #风扇状态
    fan=okCheck(listCheck(list_tr,'FAN'))
    #raid状态
    raid=okCheck(listCheck(list_tr,'RAID','Raid'))
    #电源状态
    power=okCheck(listCheck(list_tr,'Power'))
    #磁盘状态
    disk=okCheck(listCheck(list_tr,'Disk'))


    #数据列表
    data=[
    ipaddr,
    xuliehao,
    xinghao,
    ibmc,
    bios,
    fan,
    power,
    disk,
    cpu,
    raid,
    jinji,
    yanzhong,
    qingwei
    ]

    #拼接行号
    row='A'+str(rowNum)
    #将内容写进行号指定的行
    worksheet.write_row(row,data)
    rowNum+=1
    #删除页面缓存
    driver.delete_all_cookies()
    driver.close()
    f.close()
    workbook.close()
  • 相关阅读:
    清空
    从一个例子看现代C++的威力
    C++11实现一个自动注册的工厂
    REST RPC架构思想
    thinking in object pool
    worksteal thread pool
    check member function
    C# string 常用功能的方法扩展
    C#设计模式总结
    JAVA过滤器和拦截器的区别
  • 原文地址:https://www.cnblogs.com/xpptt/p/11775638.html
Copyright © 2011-2022 走看看