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