华为服务器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()
华为服务器IBMC批量巡检代码的更多相关文章
- 使用plupload绕过服务器,批量上传图片到又拍云
本文最初发布于我的个人博客:Jerry的乐园 综述 论坛或者贴吧经常会需要分享很多图片,上传图片比较差的做法是上传到中央服务器上,中央服务器再转发给静态图片服务器.而这篇文章讲介绍如何使用pluplo ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs
ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...
- 艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布
艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周 ...
- 解放双手:如何在本地调试远程服务器上的Node代码
写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...
- Android JUnit Test——批量运行测试代码
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...
- 【转】- 使用T4模板批量生成代码
前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- 如何使用CodeSmith批量生成代码(原创系列教程)
在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...
随机推荐
- 微信 使用wScratchPad 组件时 出错
说是由于android版本bug 可访问 https://github.com/websanova/wScratchPad/issues/15 解决方法: $("#wScratchPad c ...
- SpringBoot 配置 Tomcat SSL
SpringBoot 配置 Tomcat SSL SSL(Secure Sockets Layer , 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密 ...
- Anaconda 下 Jupyter 更改默认启动路径和默认浏览器
1.Jupyter 更改默认启动路径方法 输入jupyter notebook --generate-config 会生成jupyter_notebook_config.py 找到文件,并打开 将 # ...
- js替换文本内容。实例
<script language="javascript"> var r= "1\n2\n3\n"; //将字母\n替换成分号 alert(r.re ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- 两种dp模型
两个常见模型 bzoj 4321 题意:编号为1~n的人排成一排,问有多少种排法使得任意相邻两人的编号之差不为1或-1. n<=1000 排列计数问题:考虑把数从小到大插入的过程进行dp. 设 ...
- Noip2011 提高组 Day1 T3 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- 【luoguP1182】数列分段 Section II
题目描述 对于给定的一个长度为N的正整数数列A-i,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- 捣乱Linux环境下的C语言
#include <stdlib.h> 头文件作用.CSDN C 标准库 – <stdlib.h> | 菜鸟教程 https://www.runoob.com/cprogra ...
- Redis evalsha 命令
相当于根据sha1校验码,执行缓存在服务器的一段代码. 这个命令的使用方法类似eval--参数的传入方式等等 使用需要redis版本 >= 2.6.0 语法 *> evalsha sha1 ...