使用Selenium,获取Cisco网站Bug信息

3年前,在某大公司网路组工作过半年多时间,有时候客户有需求去定期获取Cisco网络设备(路由器,交换机,防火墙)公开的Bug信息。

前期工作的同事都是手动在网站搜索下载,重复性的工作,对写代码的人来说干着别扭。。。

当时正在看Selenium的内容,所有试着用Selenium来实现。

1,其实用其他的HTTP库urllib之类效率应该更高,但是为了以后的比对,我们每次搜索出来的结果界面都有自动截图,作为证据。

2,代码编写边调试。后面懒,未做格式美化和逻辑优化了。

3,需要实现准备配置文件,提供Cisco Bug的一些信息。


'''
author: tany_xie@qq.com
'''
from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException,ElementNotVisibleException
import time
import xlrd
import os
from shutil import copy
ERRFLG=0
def check_load_finish():
    pathstring1 =r"//div[@class = 'searchInfoToolBar']/div/div[@class = 'firstDiv']"
    re_text1 = browser.find_element_by_xpath(pathstring1).text 
    print(re_text1)  
    loadmsg=r'//li[@class ="loadMessage"]'
    try:
        loadtext = browser.find_element_by_xpath(loadmsg).text
    except NoSuchElementException:
        if re_text1 != "":
            return True
        else:
            return False
    print(loadtext)
    if re_text1 != "" or loadtext.find('No Matching Bugs Found') != -1:
        return True
    else:
        return False
def check_results_of_bug(browser,bugpath):
    pathstring =r"//div[@class = 'searchInfoToolBar']/div/div[@class = 'firstDiv']"
    re_text = browser.find_element_by_xpath(pathstring).text
    print("re_text:"+re_text)
    result = re_text.split(' ')
    print("result:"+result[5])
    res_num =result[5]
    print("res_num")
    if res_num  == "":
        return 0
    data=open_excel(bugpath)
    table=data.sheet_by_name("Search Results")
    nrows=table.nrows #total rows
    print("nrows:"+str(nrows))
    if str(nrows-1) == res_num:
        return 1
    else:
        return 0
def check_exists_by_ID(ID):
    try:
        browser.find_element_by_id(ID).click()
    except ElementNotVisibleException:
        return 0
    return 1
def open_excel(file):
    try:
        data = xlrd.open_workbook(file)
        return data
    except Exception:
        print ("excel open err")


def get_data_by_tbname(file,tablename='CiSCO_BUG_INI'):
    data=open_excel(file)
    table=data.sheet_by_name(tablename)
    nrows=table.nrows #total rows
    #ncols = table.ncols #列数
    #colnames =  table.row_values(2) #2 row data
    list=[]
    for i in range(1,nrows):
        if table.cell(i,8).value == 'true':
            app={}
            app['kata']=str(table.cell(i,0).value)
            app['num']=str(table.cell(i,1).value)
            #app['prname']=str(table.cell(i,2).value)
            #app['fullprname']=str(table.cell(i,3).value)
            app['prID']=str(table.cell(i,4).value)
            #app['sftype']=str(table.cell(i,5).value)
            app['ver']=str(table.cell(i,6).value)
            app['fun']=str(table.cell(i,7).value)
            #app['flag']=str(table.cell(i,8).value)
            app['prouctname']=str(table.cell(i,9).value)      
            app['funkey'] = table.cell(i,10).value
            app['statusVal'] = table.cell(i,11).value
            app['severityVal'] = table.cell(i,12).value
            #print(app['prouctname'])
            list.append(app)
    return list


def writelog(context):
    file_object = open(os.path.abspath('.')+'\\log.txt','a')
    try :
        file_object.write(time.ctime()+":"+context+'\n')
    finally:
        file_object.close( )
        
def copy_bug_search_to(downloadfile,desfolder):
    if not os.path.exists(desfolder):
        os.makedirs(desfolder)
    copy(downloadfile, desfolder)


def getexecl(keyword,desfolder):
    if os.path.exists(downfile):
        os.remove(downfile)     
    if not os.path.exists(desfolder):
        os.makedirs(desfolder)
    if keyword == 'Active/Standby':
        keyword = 'Active_Standby'
    if keyword =="Active/Active":
        keyword = "Active_Active"
    if keyword =="" or keyword =="*":
        filename='bugsearch.xls'
        pngfile =desfolder+"\\" + str(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))+".png"
    else:
        filename='bugsearch_'+keyword+'.xls'
        pngfile =desfolder+"\\" + str(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))+"_"+keyword+".png"
    print("check_load_finish()"+str(check_load_finish()))
    if not check_load_finish():
        time.sleep(5)
    if not check_load_finish():
        writelog("Err:Load Uncompleted "+desfolder+'\\'+keyword)
        return False
    browser.get_screenshot_as_file(pngfile)
    writelog(pngfile)
    if check_exists_by_ID("exportToEcelHelp"):
            #browser.find_element_by_id("exportToEcelHelp").click()
        time.sleep(5)
        print(downfile)
        if os.path.exists(downfile):
            copy_bug_search_to(downfile,desfolder)
            os.rename(desfolder+'\\'+'bugsearch.xls',desfolder+'\\'+filename)
            if check_results_of_bug(browser,desfolder+'\\'+filename) == 1:
                writelog("OK!! checked")
                print("OK!! checked")
            else:
                writelog("NG!! checked ")   
                print("NG!! checked") 
                global ERRFLG
                ERRFLG=1
        else:#try again to copy downded file 
            time.sleep(8)
            if os.path.exists(downfile):
                copy_bug_search_to(downfile,desfolder)
                os.rename(desfolder+'\\'+'bugsearch.xls',desfolder+'\\'+filename)
                if check_results_of_bug(browser,desfolder+'\\'+filename) == 1:
                    writelog("OK!! checked")
                    print("OK!! checked")
                else:
                    writelog("NG!! checked ")   
                    print("NG!! checked")
                    #global ERRFLG
                    ERRFLG=1
            else:
                print("Err:"+desfolder+'\\'+keyword)
                writelog("Err:"+desfolder+'\\'+keyword)
                #global ERRFLG
                ERRFLG=1
    else:
            print("no excel export")
            writelog(desfolder+'\\'+keyword+':no excel export')
            
def getdata(desfolder,keyword,pf,ID,releaseText,sb='anfr',mDt=4,sts='fd',svr='2nH'):
    if keyword =="" or keyword =="*":
        browser.get('https://tools.cisco.com/bugsearch/search?kw='+keyword+'&pf='+pf+'&pfVal='+ID+'&rls='+releaseText+'&mDt='+mDt+'&sts='+sts+'&svr='+svr+'&sb=anfr&srtBy=byRel')    
        time.sleep(5)
        getexecl(keyword,desfolder)
    else:
        keyword = keyword.split(',')   
        for kw in keyword:
            browser.get('https://tools.cisco.com/bugsearch/search?kw='+kw+'&pf='+pf+'&pfVal='+ID+'&rls='+releaseText+'&mDt='+mDt+'&sts='+sts+'&svr='+svr+'&sb=anfr&srtBy=byRel')    
            time.sleep(5)
            getexecl(kw,desfolder)
  
###########################   
cruentpath= os.path.abspath('.')
downfile = r'C:\Users\111111\Downloads\bugsearch.xls'
table=get_data_by_tbname(cruentpath+'\\Cisco_Bugsearch_ini_No(61).xls','CiSCO_BUG_INI')
profile = webdriver.FirefoxProfile(r"C:\Users\111111\AppData\Roaming\Mozilla\Firefox\Profiles\s1t5dj6p.default")
#profile.native_events_enabled = True
browser = webdriver.Firefox(profile)
#login
browser.get("https://sso.cisco.com/autho/forms/CDClogin.html")
elem1 = browser.find_element_by_name("userid")
elem2 = browser.find_element_by_name("password")
elem1.send_keys("userid")
elem2.send_keys('password')
elem2.submit()              


#print(cruentpath)


for i in range(len(table)):
    if os.path.exists(downfile):
        os.remove(downfile)
    if table[i]['severityVal'] == "1":
        svr='1'
    if table[i]['severityVal'] == "2 or higher":
        svr='2nH'
    if table[i]['severityVal'] == "3 or higher":
        svr='3nH'
    if table[i]['severityVal'] == "4 or higher":
        svr='4nH'
    if table[i]['severityVal'] == "5 or higher":
        svr='5nH'
    if table[i]['severityVal'] == "6 or higher":
        svr='6nH'
    if table[i]['prouctname'] == 'se':
        pf='sr'
    else:
        pf='prdNm'
    sb='anfr'
    mDt='4'#Last year
    statusvalue ={'Fixed':"fd","Open":"open","Terminated":'tmd',"Other":"otr"}
    '''
    if table[i]['statusVal']== 'Fixed':
        sts='fd' 
    if table[i]['statusVal']== 'Open':
        sts='open' 
    if table[i]['statusVal']== 'Terminated':
        sts='tmd' 
    if table[i]['statusVal']== 'Other':
        sts='otr' 
    '''
    sts=statusvalue[table[i]['statusVal']]
    desfolder=cruentpath+'\\'+table[i]['kata']+'\\'+table[i]['num']
    if table[i]['fun'] == "No":
        kw="*"
        getdata(desfolder,kw,pf,table[i]['prID'],table[i]['ver'],sb,mDt,sts,svr)
    elif table[i]['fun'] == "Yes":
        keywordlist = table[i]['funkey']
        if keywordlist == '':
            print("No key words")
            writelog("No key words")
        else:
            getdata(desfolder,keywordlist,pf,table[i]['prID'],table[i]['ver'],sb,mDt,sts,svr)
    else:
        print ("Fun Flag err")
        writelog("Fun Flag err")
#browser.quit()
global ERRFLG
if ERRFLG==0:
    print('sucess!')
    writelog('sucess!')
else:
    print("Pls check NG or ERR ")
    writelog("Pls check NG or ERR ")


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值