馬寧 陳曦 張李銘
摘要:Python包含大量官方庫(kù),可以實(shí)現(xiàn)種類繁多的編程工作,如Selenium庫(kù)可實(shí)現(xiàn)自動(dòng)化測(cè)試,Openpyxl庫(kù)可操作excel數(shù)據(jù)表,這些庫(kù)可以極大地節(jié)約時(shí)間,提升工作效率。通過(guò)一個(gè)具體案例的設(shè)計(jì)實(shí)現(xiàn)過(guò)程闡述了如何采用Python的seleni-am、openpyxl等實(shí)3"EWeb腳本自動(dòng)化操作,解決了項(xiàng)目中大量重復(fù)性工作的自動(dòng)化實(shí)現(xiàn)目標(biāo)。
關(guān)鍵詞:Python;自動(dòng)化;Openpyxl;Selenium
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)01-0051-03
1概述
在現(xiàn)實(shí)社會(huì)中,人們經(jīng)常需要進(jìn)行一系列重復(fù)性的操作,這些重復(fù)性的操作原理簡(jiǎn)單,但是過(guò)程煩瑣,浪費(fèi)了工作人員寶貴的時(shí)間。隨著社會(huì)的發(fā)展,IT技術(shù)日新月異,新技術(shù)不斷涌現(xiàn),人工測(cè)試也不再能滿足日益增長(zhǎng)的復(fù)雜任務(wù)和可靠性測(cè)試需求,這就需要有效率更高、可靠性更強(qiáng)、更易操作的自動(dòng)化測(cè)試方案。Selenium是web應(yīng)用程序自動(dòng)化測(cè)試工具集,包括IDE、Grid、RC、WebDriver等,可以直接在瀏覽器中運(yùn)行,模擬使用者的實(shí)際操作,具有很強(qiáng)的真實(shí)感,目前支持的主流瀏覽器包括IE系列、Opera瀏覽器、火狐瀏覽器等。利用自動(dòng)化測(cè)試技術(shù),可設(shè)計(jì)腳本實(shí)現(xiàn)某些項(xiàng)目中的重復(fù)性程序執(zhí)行操作,讓辦公自動(dòng)化實(shí)現(xiàn)智能化。
2Python與項(xiàng)目開(kāi)發(fā)環(huán)境配置
2.1Python編程語(yǔ)言簡(jiǎn)介
Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。起初由荷蘭程序員吉多·范羅蘇姆在1989年編寫。Python秉承優(yōu)雅、明確、簡(jiǎn)單的設(shè)計(jì)哲學(xué),從而使得它的程序易讀懂、代碼量少。在1991年完成解釋器后,吉多將它開(kāi)源,它的解釋器易于擴(kuò)展,可以使用c或c++擴(kuò)展各種新的功能和數(shù)據(jù)。Python還可用作可定制化軟件中的擴(kuò)展程序語(yǔ)言。如今,在廣大程序員集思廣益下,Python已最終發(fā)展成擁有強(qiáng)大的標(biāo)準(zhǔn)庫(kù)與大量第三方模塊支持的一門面向?qū)ο缶幊陶Z(yǔ)言。
2.2 Python開(kāi)發(fā)環(huán)境安裝
1)下載Pvthon安裝包
在瀏覽器對(duì)應(yīng)地址欄中輸入python官網(wǎng)的下載欄目地址https://www.python.org/downloads/windows/。
然后,點(diǎn)擊最新版本進(jìn)入Pvthon3下載界面將彈出的新網(wǎng)頁(yè)移至最下端Files界面,選擇32位或64位安裝包,如圖1。
2)安裝
雙擊打開(kāi)python安裝文件,如圖2,選擇自定義安裝,勾選AddPython 3,XX to PATH(此處若不勾選,完成安裝后還需手動(dòng)配置環(huán)境變量1。進(jìn)入自定義安裝后依次將各個(gè)選項(xiàng)打勾,點(diǎn)擊Next,進(jìn)入如圖3界面,一次勾選后,點(diǎn)擊Browse選擇安裝路徑,此時(shí)如果需要配置環(huán)境變量,還須記住紅框內(nèi)的軟件安裝位置。安裝程序完成后會(huì)出現(xiàn)“Setupwassuccessful”提示,點(diǎn)擊界面右下角Close即可。
3)測(cè)試
Python安裝好后,還需測(cè)試安裝是否成功。用“Win+R”快捷鍵打開(kāi)運(yùn)行,輸入命令行工具“cmd”,在彈出黑框內(nèi)輸入“py-thon—V”然后鍵入回車,如果顯示如上圖4界面紅框部分,則說(shuō)明Python安裝成功了。反之,如果命令下方出現(xiàn)“Python不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件”提示,則表示安裝未成功。需要重新檢測(cè)如上步驟是否操作正確。
3Web腳本自動(dòng)化控制流程設(shè)計(jì)
3.1自動(dòng)化流程控制技術(shù)簡(jiǎn)介
自動(dòng)化流程控制的出現(xiàn),提供了很多的便利。自動(dòng)化控制完全由電腦進(jìn)行操作,人類不需要過(guò)多的操作,只需進(jìn)行一些條件設(shè)定即可。這極大地提高了準(zhǔn)確度,并且減少了人力的消耗,提高了效率。自動(dòng)化流程控制主要有以下幾個(gè)優(yōu)點(diǎn):
1)在對(duì)某個(gè)系統(tǒng)操作的過(guò)程中,可能會(huì)存在許多重復(fù)性的工作。人工完成這些工作明顯不是最好的方法,重復(fù)性高、過(guò)程煩瑣的工作利用自動(dòng)化技術(shù)是最好的。
2)自動(dòng)化控制的環(huán)境一般是相同的,結(jié)果也可以重復(fù)出現(xiàn),自動(dòng)化控制能使每一次的操作流程都保持一致,不會(huì)缺少某些步驟。因此,自動(dòng)化控制準(zhǔn)確性高、結(jié)果復(fù)現(xiàn)次數(shù)多。
3)自動(dòng)化控制可以解決:假若某一流程的操作方法出現(xiàn)錯(cuò)誤,或者有變更,則只需修改某一段代碼,即可開(kāi)始執(zhí)行,也無(wú)須浪費(fèi)人力、物力,而且操作簡(jiǎn)單,無(wú)須適應(yīng)新的流程。
4)自動(dòng)化流程控制是完成按照測(cè)試方案來(lái)執(zhí)行的,假若執(zhí)行成功,則可證明測(cè)試無(wú)誤,流程正確,無(wú)須其他推理論證過(guò)程。
3.2軟件設(shè)計(jì)流程
web自動(dòng)化流程設(shè)計(jì)主要包括:制定自動(dòng)化控制流程計(jì)劃,根據(jù)需求說(shuō)明書分析具體需求,搭建變成環(huán)境,設(shè)計(jì)用例,再編寫代碼,并手動(dòng)執(zhí)行。最后選擇自動(dòng)化用例,再進(jìn)行自動(dòng)化測(cè)試。具體流程如下:
3.3Web腳本自動(dòng)流程控制軟件功能模塊
3.3.1selenium庫(kù)的介紹
selenium是一個(gè)用于web應(yīng)用程序的自動(dòng)化控制工具。它能運(yùn)行于多種瀏覽器,例如IE,火狐瀏覽器,Safari,谷歌瀏覽器,Opera等。在本研究中,selenium運(yùn)行于Google瀏覽器上。selenium主要結(jié)合web前端的標(biāo)簽,通過(guò)尋網(wǎng)頁(yè)標(biāo)簽里的屬性,例如:class、id等,也可通過(guò)xpath來(lái)定位網(wǎng)頁(yè)中的元素。seleni-um可以定位元素,也可以對(duì)元素進(jìn)行操作,當(dāng)定位到一個(gè)文本框,可以自動(dòng)輸入指定內(nèi)容,定位到關(guān)閉符號(hào),可進(jìn)行關(guān)閉窗口操作等。selenium就像真實(shí)用戶操作一樣,對(duì)定位到的元素進(jìn)行點(diǎn)擊、插入文本等操作,且操作簡(jiǎn)單、易學(xué),可使用Pvthon、Ja-va等多種語(yǔ)言實(shí)現(xiàn)。
3.3.2 selenium庫(kù)的使用方法
3.3.2.1導(dǎo)入selenium庫(kù)
Python導(dǎo)入庫(kù)的一般方法:from selenium import webdriver
3.3.2.2基本操作
1)啟動(dòng)瀏覽器
在本研究中用的是谷歌瀏覽器,故使用以下方法:
driver=webdriver.Chrome()
2)打開(kāi)網(wǎng)頁(yè)
driver.get(“http://XXX.XXX.XXX.XXX/index.html”)
30獲取元素的幾種方法
通過(guò)標(biāo)簽的類名獲取元素:find_element_by_class_name()
通過(guò)標(biāo)簽的id名獲取元素:find_element_by_id()
通過(guò)標(biāo)簽的xpath獲取元素:find_element_by_xpath()
通過(guò)標(biāo)簽的name名獲取元素:find_element_by_name()
4)frame的轉(zhuǎn)換
在網(wǎng)頁(yè)中,每一個(gè)功能都包含一個(gè)frame,無(wú)法直接用獲取元素的方法定位元素。用selenium切換frame的操作,使主頁(yè)面在眾多子頁(yè)面中進(jìn)行跳轉(zhuǎn),從而獲取元素。切換frame操作:driver,switch_to~flame(O)。也可以根據(jù)frame名字來(lái)切換flame:driver.switch_to.parent_frameO
5)向文本框輸入值:input.send_keys(“python”)
6)點(diǎn)擊某個(gè)元素:driver.find_element_by_id(“ys”).click()
7)執(zhí)行Js操作:driver.execute_script(window.scrollTo((),document.body.scrollHeight))
8)time操作
在本研究中,有可能時(shí)會(huì)找不到元素。究其原因,元素尚未加載完成。因此要給予元素加載的時(shí)間,待元素都加載完畢,才能定位到元素,并且進(jìn)行相關(guān)操作。步驟如下:
①導(dǎo)入time庫(kù):import time
②進(jìn)行緩沖操作:time.sleep(3)
給予緩沖的時(shí)間后,元素加載完畢,繼續(xù)進(jìn)行相關(guān)操作。
3.3.30penpyxl庫(kù)的介紹
openpyxl是Pvthon中一個(gè)操作excel的庫(kù),可以對(duì)excel庫(kù)中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),也可以進(jìn)行讀寫操作。它可以在后臺(tái)打開(kāi)excel表,并且支持excel表中的常規(guī)操作,例如:篩選、排序、單元格操作等。
3.3.4 openpyxl庫(kù)的使用
1)導(dǎo)入openpyxl庫(kù):import openpyxl
21導(dǎo)入要處理的excel表格:wb=openpyxl.load_workbook('XXX,XIsx)
30激活工作簿
此時(shí)excel表格還不能正常操作。需要激活工作簿,才能進(jìn)行操作。
ws=wb.active
4)獲取所有行和列
在本研究中,要對(duì)所有數(shù)據(jù)進(jìn)行統(tǒng)計(jì),因此需要獲取所有行、列中的數(shù)據(jù),以防數(shù)據(jù)缺漏。
row=xl sheet.max_row
column=xl_sheet.max_column
5)刪除不需要的數(shù)據(jù)
在excel表中,有一部分是要?jiǎng)h除的。Python中可以用匹配的方法,結(jié)合openpyxl庫(kù)中的函數(shù),刪除掉我們不需要的數(shù)據(jù)。具體實(shí)現(xiàn):
把不符合的先放入一個(gè)數(shù)組中:filters=[XX,YY,zz]
遍歷所有數(shù)據(jù),只要有以這三個(gè)為開(kāi)頭的數(shù)據(jù),先執(zhí)行刪除操作:
符合的條件:str(ws['A'][i].value)[0:2]in filters)
刪除操作:ws.delete_rows(行數(shù))
6)進(jìn)行時(shí)間計(jì)算
在excel表中,有時(shí)候我們需要對(duì)時(shí)間進(jìn)行差值計(jì)算,并且篩選出符合條件的數(shù)據(jù),因此需要將實(shí)際時(shí)間與設(shè)定的時(shí)間相減,篩選出符合條件的進(jìn)行統(tǒng)計(jì)。具體實(shí)現(xiàn):
需要獲取時(shí)間:時(shí)間在AB列里,故獲取方式為:WS[“AB”][i].value,1
再作差:hour=float(houri-hour21
7)將統(tǒng)計(jì)完的數(shù)據(jù)進(jìn)行寫入操作:sheet.cell(行,列).value=值
8)保存excel表:excel.save(“TEST.xlsx”)
3.4界面功能模塊
軟件界面是使用Python中的tkinter開(kāi)發(fā)模塊,tkinter是Py-thon標(biāo)準(zhǔn)的GUI庫(kù),Pvthon在使用tkinter時(shí)能夠快速進(jìn)行各種簡(jiǎn)單頁(yè)面的開(kāi)發(fā),并tkinter可運(yùn)行在多種平臺(tái)中。在本研究中,tkinter主要用于構(gòu)建軟件界面,以便操作人員設(shè)置數(shù)據(jù),選擇選項(xiàng),使自動(dòng)化控制流程在某些特定條件下進(jìn)行。
軟件的布局采用普通的設(shè)計(jì)布局。下面以本研究為例,設(shè)計(jì)軟件布局。軟件主要由以下部分組成:業(yè)務(wù)類型、是否超時(shí)、當(dāng)前時(shí)間設(shè)定、環(huán)節(jié)時(shí)間設(shè)定、選擇保存數(shù)據(jù)、開(kāi)始執(zhí)行、結(jié)束執(zhí)行等功能。
軟件界面具體說(shuō)明如下:
1)業(yè)務(wù)類型,包括:全選、用戶、報(bào)修、查詢、其他等多種業(yè)務(wù)類型。
2)是否超時(shí),包括:是和否。
3)當(dāng)前時(shí)間,可以人為設(shè)置時(shí)間。
4)周期,包括年、月、日。
5)循環(huán)時(shí)間,可以人為設(shè)置。
3.4.1功能區(qū)開(kāi)發(fā)
11業(yè)務(wù)類型選擇區(qū):主要存放網(wǎng)頁(yè)中可選擇的項(xiàng),例如用電業(yè)務(wù)、報(bào)修、查詢、其他等可選項(xiàng)。
2)當(dāng)前時(shí)間填寫區(qū):因?yàn)橐?jì)算超過(guò)的時(shí)間,故要填寫超過(guò)的小時(shí)數(shù)。
3)周期選擇區(qū):主要由年、月、日組成,選擇計(jì)算的周期。
4)操作區(qū):主要包括三個(gè)按鈕:保存、開(kāi)始、結(jié)束。
保存:在人工選擇完條件之后,需要進(jìn)行保存,點(diǎn)擊保存后,將會(huì)向主程序傳遞相關(guān)參數(shù),使主程序依照條件進(jìn)行自動(dòng)化操作。
開(kāi)始:開(kāi)始執(zhí)行相關(guān)操作。
結(jié)束:結(jié)束執(zhí)行相關(guān)操作。
4實(shí)現(xiàn)技術(shù)總結(jié)
Python編程語(yǔ)言為解釋型編程語(yǔ)言,它短小精悍的語(yǔ)法,簡(jiǎn)便清晰的代碼格式,使其成為當(dāng)今極其火熱的編程語(yǔ)言;并廣泛用于數(shù)據(jù)分析、人工智能、爬蟲和Web應(yīng)用等領(lǐng)域。本次研究是使用Pvthon在Web端的官方庫(kù)與第三方庫(kù)sdenium和openpyxl來(lái)進(jìn)行開(kāi)發(fā)與實(shí)現(xiàn)。Seletium庫(kù)可以模擬瀏覽器操作、背后有GooSe維護(hù)源代碼、且支持全部主流瀏覽器與各種主流編程語(yǔ)言。Seletium通過(guò)使用WebDriver的各種API接口,為開(kāi)發(fā)提供了一系列的定位符以便使用元素定位方法。open-pyxl模塊是一個(gè)讀寫Excel文檔的Pvthon庫(kù),在處理Excel文檔上,有種類繁多的庫(kù)函數(shù),openpyxl能夠同時(shí)讀取和修改Excel文檔。它擁有的active、worksheets、read_onlv等對(duì)象屬性和方法,可以實(shí)現(xiàn)各種具體的Excel表格統(tǒng)計(jì)與整理工作。
這些自動(dòng)化操作的實(shí)現(xiàn),大大降低了人工操作的時(shí)間與精力成本。它實(shí)現(xiàn)的各種網(wǎng)頁(yè)與Excel操作,使得自動(dòng)化統(tǒng)計(jì)表格數(shù)據(jù)成為可能。在信息數(shù)量紛繁與復(fù)雜的當(dāng)下,自動(dòng)化的技術(shù)變得越來(lái)越重要也被需要,去廣泛地代替人工操作煩瑣重復(fù)的工作。