作为国内优秀的终端管理管理工具 联软提供了非常丰富且使用的终端管理及管控功能
本文想说的是如何利用联软提供的后台卸载功能 配合 selenium 实现客户端软件卸载
需求说明: 集团有4000台终端部署联软客户端软件,但因业务及管理要求,需要调整使用范围,则需要对相关终端进行卸载。
现状说明:联软的管理控制台默认提供了客户端软件卸载功能,但仅支持单台卸载。
思路:通过Selenium 模拟手动操作,自动实现软件卸载工作。
开发环境:python
相关软件包:selenium、xlrd
chrome 版本:85 (chromedriver 要求chrome版本一致)
代码:#从Excel 清单获取需要删除的计算机名单
#代码名称:Opera_Excel.py
import xlrd import xlwt def R_Excel(wb_name,ws_name): # wb_name=input("请输入需要导入的表格名称:") try: wb= xlrd.open_workbook(wb_name) try: ws = wb.sheet_by_name(ws_name) return ws except: print("Failed to locate WorkSheet %s !" %ws_name) except: print("Failed to locate WorkBook %s !" %wb_name) def W_Excel(wb_name,ws_name,data): WB=xlwt.Workbook() WS=WB.add_sheet('Sheet1') i=0 for each in data: # print(each) check_Res=check_Login(each) i=i+1 WS.write(i, 0, check_Res) if i%20==0: WB.save('Excel_Workbook.xls') def Get_Info(ws): """ 用于查询工作表内的详细内容并将其所在列及的形式返回 """ line_list=list() for i in range(1,ws.nrows): if ws.cell(i,1).value: line_list.append(ws.cell(i,0).value) return line_list # def Get_info(ws): # Data_List=list() # for i in range(1,ws.nrows): # line_list=list() # for j in range(0,ws.ncols): # line_list.append(ws.cell(i,j).value) # Data_List.append(line_list) # return Data_List
代码:#操作联软后台服务器
# 练习通过id定位 # 导入webdrvier import Opera_Excel as OE from selenium import webdriver from selenium.webdriver.support.select import Select import time from selenium.webdriver.common.action_chains import ActionChains Uname='a-hanhui' Pwd='Alstom12' driver = webdriver.Chrome() # hostname='DWTCNSSZ01FIZLZ' # 访问联软网站 url = 'http://10.xxx.xxx.xxx:8088/manager/loginController.htm?act=login' driver.get(url) time.sleep(5) # 1、执行登陆操作 def login_action(): # 定位到登陆按钮 el_Uname=driver.find_element_by_xpath('//*[@id="stroperatorname"]') el_Pwd=driver.find_element_by_xpath('//*[@id="strpwd"]') el_submit=driver.find_element_by_xpath('//*[@id="submitButtom"]') el_Uname.send_keys(Uname) print('U') time.sleep(1) el_Pwd.send_keys(Pwd) print("P") # 点击操作,前提是定位到元素 time.sleep(1) el_submit.click() # 2、检查系统是否登陆状态 def check_login(): try: driver.switch_to.default_content() login_info=driver.find_element_by_xpath('//*[contains(text(), "a-hanhui")]') login_info.click() except: login_action() # 3、检查是否有弹框,如有则关闭 def check_licInfo(): try: lic_Info=driver.find_element_by_xpath('//*[@class="x-tool x-tool-close"][1]') lic_Info.click() time.sleep(1) except: pass def check_ifonline(): try: # driver.find_element_by_xpath('//*[@id="datagrid-row-r3-2-0"]/td[2]/div/img[@title="UniAccess安全助手在线"]').click() driver.find_element_by_xpath('//*[@title="UniAccess安全助手在线"]').click() time.sleep(1) return True except: return False # 4、进入目录 def opera(hostname): check_login() check_licInfo() driver.maximize_window() time.sleep(1) driver.find_element_by_link_text('桌面管理').click() time.sleep(10) driver.switch_to.frame("mainframe") #点击部门 driver.find_element_by_xpath('//*[@id="search-dev"]/span/input[1]').click() time.sleep(1) #设备名称 driver.find_element_by_xpath('//*[@class="combo-panel panel-body panel-body-noheader"]/div[contains(text(), "设备名称")]').click() time.sleep(1) #输入计算机名称 driver.find_element_by_xpath('//*[@id="input_strdevname"]/input').clear() driver.find_element_by_xpath('//*[@id="input_strdevname"]/input').send_keys(hostname) time.sleep(1) #搜索按钮 driver.find_element_by_xpath('//*[@id="search-dev"]/a/span/span').click() time.sleep(1) #确认安全助手在线 if check_ifonline(): # #点击复选框按钮 # driver.find_element_by_xpath('//*[@id="datagrid-row-r3-2-0"]/td[1]/div/input').click() # time.sleep(1) #点击控制助手按钮 driver.find_element_by_xpath('//*[@id="devSInfo_devinfo_agent"]/span/span').click() time.sleep(1) #点击卸载按钮 driver.find_element_by_xpath('//*[@id="Lv7000_uninstallAgent"]/div').click() time.sleep(1) #点击卸载按钮 time.sleep(1) driver.switch_to.default_content() driver.find_element_by_xpath('//*/button[contains(text(), "是")]').click() driver.refresh() check_licInfo() else: print("host: %s is not on line" % hostname) if __name__ == '__main__': # main() WB_Name='Devicelist.xlsx' WS_Name='PC_List' WS_Info=OE.R_Excel(WB_Name,WS_Name) data=OE.Get_Info(WS_Info) for each in data: # print(each) # check_login() opera(each)
参考文档:selenium之 定位以及切换frame(iframe)