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