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

思科N3K C3548交换机BUG,导致模块误告警 2022 Jun 30 08:42:34switch %ETHPORT-3-IF_SFP_ALARM: Interface Ethernet1/19, Low Temperature Alarm 2022 Jun 30 08:42:34 switch %ETHPORT-4-IF_SFP_WARNING: Interface Ethernet1/19, High Tx Power Warning 阅读详情

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


计算机网络实验(三) CPT实验 目录操作一:直接连接两台 PC 构建 LAN操作二:用交换机构建 LAN操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一:操作一: 操作一:直接连接两台 PC 构建 LAN 对相应的设备进行连接,并进行网络配置 相互ping一下 说明二者是成功联通的 操作二:用交换机构建 LAN 构建如下拓扑结构的局域网: 机器名 IP 子网掩码 PC0 192.168.1.1 255.255.255.0 PC1 192.168.1.2 255.255. 阅读详情

相关推荐

利用openVuln API自动化查询思科产品漏洞

利用思科PSIRT提供的openVuln API自动化查询思科产品漏洞,并将查询结果保存为Excel文件。

liuqianglong_liu的博客 596

Packet Tracer - 使用 CLI 配置 ASA 基本设置和防火墙

Packet Tracer - 使用 CLI 配置 ASA 基本设置和防火墙

傻傻的心动的博客 8043

工作点滴1 - Cisco IOS ver12.4 dampening bug - 思科路由器端口抑制漏洞

概述 ——————————————————————————————————————————————————           http://www.cisco.com/en/US/docs/ios/12_4/release/notes/124MCAVS.pdf CSCsr20566 Symptoms: A router may log SCHED-3-STUCKMTMR for

Adam的专栏 2995

cisco 常用信息查询入口

网上找到的 拿来收藏一下 北京CCIE实验考试考场地址及付款信息 CCIE考试位置预订(需要CCO账号) CCIE全球人数与分布查询 CCIE号码查询中心(需要CCO账号) 思科认证查询系统(需要CCO账号) 思科文档中心 思科IOS 12.4T 配置文档中心 思科普通CASE中心(需要CASE账号) 思科渠道商CASE中心(需要绑定渠道商的CCO...

weixin_33842328的博客 656

Python selenium 实例之通过 selenium 查询禅道是否有任务或者 BUG

文章目录Python selenium 实例之通过 selenium 查询禅道是否有任务或者 BUG1、封装一下 selenium 的 driver2、封装一下 selenium 的一些常用的获取元素的方法3、代码实例4、运行 Python selenium 实例之通过 selenium 查询禅道是否有任务或者 BUG 1、封装一下 selenium 的 driver from selenium import webdriver driver = webdriver.Chrome() driver.se

简简单单Onlinezuozuo 1065

WPS和Excel通用!省市区四级联动下拉菜单保姆级教程(附最新行政区划数据包)

本文详细介绍了在WPS和Excel中实现省市区四级联动下拉菜单的完整教程,包含2024年最新行政区划数据的获取与整理方法。通过名称管理器和INDIRECT函数的组合,以及WPS的特色功能,帮助用户高效准确地录入四级行政区划信息,提升数据录入效率并减少错误。

s1t2u3的博客 611

Bug记录#CiscoAnyConnect闪退

系统显示语言致CiscoAnyConnect闪退

dashi_7997的博客 671

3款 433MHz 收发模块对比:SYN480R vs RXB6 vs DL-TX19,实测卷帘门遥控距离

本文深度评测了3款433MHz收发模块SYN480R、RXB6与DL-TX19在卷帘门遥控距离、穿透性能和抗干扰能力等方面的表现。通过实测数据对比,分析了超外差、超再生和PLL锁相环技术的优劣,为智能家居和工业控制领域的无线遥控方案选型提供专业参考。

weixin_30700977的博客 393

AI编程代理Codex:从代码补全到工程任务自动化的范式转变

如果你最近在写代码时,还在手动复制粘贴、逐行调试,或者为一个复杂的重构任务感到头疼,那你可能错过了一个正在改变工程师工作方式的工具。这不是又一个普通的代码补全插件,也不是一个简单的聊天机器人。它更像是一个能理解你整个项目上下文、能并行处理多个任务、并且能真正“完成”而不仅仅是“建议”的编程伙伴。 我说的就是 Codex,一个由 OpenAI 推出的 AI 编程代理。很多人第一次听说它,会下意识地把它归类为“高级版的 GitHub Copilot”。但如果你只停留在这个认知层面,就错过了它最核心的价值。Cod

weixin_30892763的博客 684

【计算机视觉学习03】全景图像拼接

文章目录一、基本原理1.1 图像拼接的几何原理1.2 直线,圆,复杂曲线方程拟合1.3 RANSAC算法1.4 APAP算法1.5 寻找最佳拼接缝(Seam Finding)1.5.1 最大流问题1.5.2 最大流问题的增广链算法1.5.3 最大流最小割定理二、 图像拼接具体实现2.1 代码2.2 运行结果 一、基本原理 将两幅或多幅具有重叠区域的图像,通过特征匹配将具有相同的特征点(SIFT特征点)的图像拼接在一起,将来自多个不同视角拍摄的图像变换到同一视角下,拼接成一张宽视野图像。 图像拼接基础流程

一个正在努力学习的iter 7789

Mac查看以太网信息,IP地址,查看配置桥接网络,使得虚拟机和本机ping通--linux系统part

4. 在本机的终端中使用ping命令,查看是否能够ping通虚拟机系统,如下图所示已经ping通。3-查看IP为192.168.1.244,还可以看到一些具体信息,如TCP/IP,DNS等;2-打开centos,进入管理员root模式(使用su命令加上输入管理员密码)然后使用ifconfig命令查看端口地址,如下所示为192.168.1.248。3-在虚拟机内使用ping命令,测试是否和网络连通,如下图所示已经ping通。打开虚拟机设置-点击网络适配器-选择桥接网络。1-打开设置,选择网络。

m0_65485230的博客 1549

3.6.1.2 AAAyjj Authentication on Cisco Routers

Packet Tracer - 在思科路由器上配置 AAA 认证 地址分配表设备接口IP 地址子网掩码默认网关交换机端口R1G0/1192.168.1.1255.255.255.0不适用S1 F0/1S0/0/0 (DCE)10.1.1.2255.255.255.252不适用不适用R2G0/0192.168.2.1255.255.255.0不适用S2 F0/2S0/0/010.1.1.1255.255.255.252不适用不适用S0/0/1 (DCE)10.2.2.1255.255.255.252不适用不适

weixin_54243289的博客 3871

制造业与工业知识图谱应用

在全球数字化转型背景下,制造业面临创新周期缩短、质量管控精细化等挑战。知识图谱技术通过结构化表示工业知识,为智能制造提供关键技术支撑。工业知识图谱具有专业性强、多源异构数据融合、实时性要求高等特点,其构建流程涵盖本体设计、知识抽取与整合等环节。研究显示,知识图谱与大模型结合可提升工业场景的智能化水平,在设备故障诊断、供应链优化等领域具有显著应用价值。该技术有望成为制造业数字化转型的核心驱动力。

分享一些感兴趣的技术方面 1444

CISCO 3750 BUG

CISCO 3750 BUG 今天在测试cisco 3750的时候发现一个bug Switch Ports Model SW Version SW Image ------ --...

weixin_34179968的博客 220

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复)

本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。

1a2s3d4f5g的博客 670

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1608

用思科软件做实验时遇到的一些bug及其原因

思科 网路实验 路由器

m0_51260846的博客 2732

【OpenClaw从入门到精通】:Web控制台使用全解析——可视化配置与监控(2026实操版)

在OpenClaw的多种管理方式中,Web控制台提供了最直观、最友好的用户体验。通过图形化界面,用户可以轻松完成复杂的配置任务,实时监控系统状态,以及进行各种管理操作。对于不熟悉命令行的用户来说,Web控制台是最佳选择。

一键难忘的博客 1929

selenium学习笔记(12)——selenium各种可能出现的Bug以及解决方案汇总

想要系统学习python selenium自动化测试,请关注我的专栏: https://blog.youkuaiyun.com/column/details/29112.html 功能:selenium各种可能出现的Bug以及解决方案汇总 一、火狐浏览器与geckodriver.exe、谷歌浏览器与chromedriver 版本不对应问题 解决方案:将chromedriver换成对应。 详细讲解前往:ht...

Hello,小高同学 1357

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

思科WLC5508 7.4.121 版本 BUG

WLC型号:AIR-CT5508-500-K9WLC IOS版本:7.4.121故障现象:Web界面无法登录WLCAs we discussed over the phone, we found the following errormessage in the log, which indicates it might hit the below bug.https://b...

weixin_34119545的博客 453

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

CISCO常用的工具介绍

GNS3Cisco PacketTracerDynamips@EDURainbow

Cool code 738

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大模型稀疏化技术原理与实战:MoE架构解析

大模型稀疏化是提升推理效率与降低部署成本的核心技术路径,其核心原理在于通过门控机制动态激活部分参数子集,实现计算资源的按需分配。相比稠密模型,稀疏化显著提升吞吐量并压缩显存占用,具备明确的技术价值与工程落地优势。当前主流应用聚焦于混合专家(MoE)架构,在LLM推理加速、边缘端适配及多任务泛化等场景中已形成稳定范式。DeepSeek-V2、Mixtral 8x7B和Qwen2-MoE等开源模型提供了可验证的稀疏化实践样本,支持vLLM等框架高效部署。本文基于真实参数规模与公开路由策略,详解MoE工作机理与生

angel192939的博客 571

Cisco Auditing Tool ----思科路由漏洞扫描

Cisco Auditing Tool 简称CAT,属于小型的安全审计工具,它可检测出Cisco路由器常见的漏洞,能够发现注入默认密码,默认SNMP字符串和老版本IOS上存在的bugroot@kali:~# CAT Cisco Auditing Tool - g0ne [null0] Usage: -h hostname (for scanning single hosts) //单个主

You Never Known How Much I Love You 3535

python selenium 点击无反应_Python的Selenium无法点击按钮

谁能帮帮我,看看我的硒脚本不能点击 "Einloggen bei my onvista "按钮的原因是什么?def open_browser():chromeOptions = webdriver.ChromeOptions()chromeOptions.add_argument("--start-maximized")prefs = {"profile.managed_default_conte...

weixin_35308770的博客 1678

漏洞分析之cisco分析工具

cisco Auditing:一个很小的安全审计工具,扫描Cisco路由器的一般性漏洞,例如默认密码,SNMP community字串和一些老的IOSbug. CAT -h xx.xx.xx.xx。cisco-global-exploiter:cisco漏洞***测试,有14个不同的漏洞。不过检查大部分漏洞都比较老旧了。cge-pl xx.xx.xx.xx number。c...

weixin_33947521的博客 761

CISCO交换机STP实验(生成树协议)

本篇记录学习计算机网络重点知识:生成树协议(STP),详细步骤将从认识到实践,使用Cisco Packet Tracer 完成,STP综合练习的PT练习 5.6.1。

陆海潘江的博客 1万+
上一篇: Http/Https代理Python实现
下一篇: Python filter函数过滤质数
plain1213
博客等级 码龄24年 5粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值