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()

华为服务器IBMC批量巡检代码的更多相关文章

  1. 使用plupload绕过服务器,批量上传图片到又拍云

    本文最初发布于我的个人博客:Jerry的乐园 综述 论坛或者贴吧经常会需要分享很多图片,上传图片比较差的做法是上传到中央服务器上,中央服务器再转发给静态图片服务器.而这篇文章讲介绍如何使用pluplo ...

  2. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  3. ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs

    ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...

  4. 艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布

    艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周 ...

  5. 解放双手:如何在本地调试远程服务器上的Node代码

    写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...

  6. Android JUnit Test——批量运行测试代码

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...

  7. 【转】- 使用T4模板批量生成代码

    前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...

  8. 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)

    先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...

  9. 如何使用CodeSmith批量生成代码(原创系列教程)

    在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...

随机推荐

  1. appium+python 【Mac】UI自动化测试封装框架介绍 <二>---脚本编写(单设备)

    1.单设备的执行很简单,平时可多见的是直接在config中进行配置并进行运行即可.如下: # coding=UTF- ''' Created on // @author: SYW ''' from T ...

  2. MUI 实现下拉刷新上拉加载的简单例子

    话不多说,直接上代码与效果图吧. <!doctype html> <html> <head> <meta charset="utf-8"& ...

  3. P3384——树链剖分&&模板

    题目描述 链接 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: ...

  4. 3、docker常用命令:help、镜像命令、容器命令

    1.帮助命令 1.docker version 2.docker info 3.重点掌握:docker --help 2.镜像命令 1.docker,镜像,容器关系 2.docker images ( ...

  5. spring-boot web项目常用配置

    一.对用户输入query参数过滤空字符串 使用 WebBindingInitializer 来对string类型参数进行过滤,但是这种方式只能处理query参数不能处理body参数 代码例子: /** ...

  6. Linux下MongoDB非正常关闭启动异常解决方法

    1.将配置信息写入一个文件中 vim mongo.conf 里面写如下内容: dbpath=/usr/local/mongodb/data/ logpath=/usr/local/mongodb/lo ...

  7. SpringJunitTest

    1.用MockBean和assert,而不是输出 import org.springframework.boot.test.mock.mockito.MockBean;MockBean import ...

  8. R语言:实现SQL的join功能的函数

    library(dplyr) ribao <- full_join(ribao,result,by = '渠道',copy = T) ribao <- full_join(ribao,se ...

  9. Java-NIO 之 Buffer 与 Channel

    NIO:一种同步非阻塞的 I/O 模型,也是 I/O 多路复用的基础. 同步与异步 同步:发起一个调用后,被调用者未处理完请求之前,调用不返回. 异步:发起一个调用后,立刻得到被调用者的回应表示已接收 ...

  10. k8s-helm01-----helm基本使用

    什么是helm Helm 是 Kubernetes 生态系统中的一个软件包管理工具. 基础概念: Helm:客户端,主要负责管理本地的 Charts.repositories 以及与tiller服务器 ...