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 webdriverimport mathimport datetimeimport xlsxwriterimport 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()