亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Python+Selenium的高校畢業(yè)設(shè)計(jì)成果自動(dòng)上傳系統(tǒng)

        2022-12-17 07:53:55丁燁敏
        現(xiàn)代計(jì)算機(jī) 2022年18期
        關(guān)鍵詞:畢業(yè)設(shè)計(jì)頁(yè)面成果

        丁燁敏

        (湖南工業(yè)職業(yè)技術(shù)學(xué)院電氣工程學(xué)院,長(zhǎng)沙 410208)

        0 引言

        學(xué)生的畢業(yè)設(shè)計(jì)成果的管理是一項(xiàng)繁瑣的工作,其中就包含畢業(yè)設(shè)計(jì)成果的保存。目前大部分高校都要求學(xué)生將畢業(yè)設(shè)計(jì)成果提交保存到指定的管理平臺(tái)。提交上傳畢業(yè)設(shè)計(jì)成果的工作,可能由學(xué)生自己,或者畢業(yè)設(shè)計(jì)指導(dǎo)老師完成,而且基本上都是通過(guò)手動(dòng)完成。只要是人為的操作,就會(huì)出現(xiàn)問(wèn)題。為了節(jié)省時(shí)間,提高畢業(yè)設(shè)計(jì)成果管理工作的效率,使用應(yīng)用程序?qū)崿F(xiàn)畢業(yè)設(shè)計(jì)成果自動(dòng)上傳提交非常有必要。

        1 開(kāi)發(fā)技術(shù)和環(huán)境

        學(xué)生畢業(yè)設(shè)計(jì)成果管理平臺(tái)一般都是通過(guò)Web進(jìn)行交互操作。因?yàn)楣芾砥脚_(tái)的API不一定開(kāi)放給一般用戶使用。所以,要實(shí)現(xiàn)自動(dòng)上傳功能,必須考慮到和畢業(yè)設(shè)計(jì)成果管理平臺(tái)Web界面的交互操作。

        目前能夠?qū)崿F(xiàn)與Web界面自動(dòng)交互的工具有Selenium[1]、QTP[2]、Watir[3]、Robot Framework[4]等。QTP是商業(yè)版本不免費(fèi),使用成本太高。Watir使用Ruby語(yǔ)言進(jìn)行腳本開(kāi)發(fā),對(duì)于沒(méi)有學(xué)過(guò)Ruby的用戶而言可能存在一些困難。Robot Framework功能很強(qiáng)大,但是更適用于進(jìn)行自動(dòng)化測(cè)試。Selenium是一個(gè)強(qiáng)大的Web自動(dòng)化工具,使用靈活并且支持各種語(yǔ)言、多種操作系統(tǒng)和瀏覽器,并且是開(kāi)源的。綜合考慮,確定使用Selenium實(shí)現(xiàn)Web自動(dòng)交互。

        登錄管理平臺(tái)需要獲取學(xué)生的相關(guān)信息,例如學(xué)生的賬戶、密碼、班級(jí)學(xué)號(hào)、課題名稱等,這些數(shù)據(jù)可能保存在excel表格中。因此,讀取excel文件數(shù)據(jù)也成為畢業(yè)設(shè)計(jì)成果上傳提交的前提。Python提供了強(qiáng)大的文件讀取和數(shù)據(jù)處理功能,并且也提供了Selenium程序包。因此最終確認(rèn)使用Python+Selenium的開(kāi)發(fā)技術(shù)來(lái)實(shí)現(xiàn)畢業(yè)設(shè)計(jì)成果自動(dòng)上傳功能。

        開(kāi)發(fā)環(huán)境方面,操作系統(tǒng)使用的是Windows 10。Python選用的版本是3.7.3。Python環(huán)境安裝完成后,使用pip install selenium命令在線安裝selenium最新版本,安裝成功后可以使用pip show selenium命令查看安裝的selenium版本。集成開(kāi)發(fā)環(huán)境使用PyCharm。

        2 需求描述

        學(xué)生畢業(yè)設(shè)計(jì)成果自動(dòng)提交需要實(shí)現(xiàn)如下需求:

        (1)自動(dòng)讀取本地excel文件中保存的學(xué)生畢業(yè)設(shè)計(jì)相關(guān)信息,包括學(xué)生姓名、班級(jí)學(xué)號(hào)、畢業(yè)設(shè)計(jì)課題名稱、管理平臺(tái)用戶名、管理平臺(tái)密碼等。

        (2)自動(dòng)打開(kāi)管理平臺(tái)網(wǎng)頁(yè),使用用戶名和密碼自動(dòng)進(jìn)行登錄。

        (3)自動(dòng)在管理平臺(tái)新建畢業(yè)設(shè)計(jì)課題任務(wù)。

        (4)自動(dòng)提交畢業(yè)設(shè)計(jì)成果并保存。

        (5)自動(dòng)獲取畢業(yè)設(shè)計(jì)成果上傳后的鏈接網(wǎng)址,并保存到本地excel文件中。

        3 功能實(shí)現(xiàn)

        通過(guò)上面功能描述,可以將程序分為兩大功能模塊:excel文件處理和Web自動(dòng)交互。excel文件處理功能模塊主要使用pandas程序包實(shí)現(xiàn),可以使用pip install pandas安裝pandas。使用pandas讀寫(xiě)excel文件的內(nèi)容不做詳細(xì)描述,在這里主要介紹使用Selenium如何實(shí)現(xiàn)自動(dòng)和Web進(jìn)行交互。

        實(shí)現(xiàn)和Web自動(dòng)交互,就需要打開(kāi)Web界面,找到Web界面上的元素,模擬人為操作,例如鍵盤(pán)輸入、鼠標(biāo)點(diǎn)擊、文件選擇等功能。

        3.1 Selenium打開(kāi)網(wǎng)頁(yè)

        Selenium支持多種瀏覽器,本程序使用的是谷歌瀏覽器。在配置完瀏覽器后,需要使用Selenium WebDriver加載要打開(kāi)管理平臺(tái)Web對(duì)應(yīng)的鏈接地址(URL)。示例代碼如下:

        from selenium import webdriver

        driver=webdriver.Chrome()

        driver.get(URL)

        3.2 Selenium查找Web頁(yè)面節(jié)點(diǎn)元素

        Selenium提供了多種查找Web頁(yè)面節(jié)點(diǎn)元素的 方 法[5],具 體包 括:find_element_by_id、find_element_by_name、find_element_by_xpath、find_element_by_link_text、find_element_by_partial_link_text、find_element_by_tag_name、find_element_by_class_name、find_element_by_css_selector。需要注意的是,這些方法的返回值是list列表類型(結(jié)果保存在list列表中)。查找Web頁(yè)面元素的示例如下。

        使用手機(jī)號(hào)作為登錄名進(jìn)行登錄時(shí),輸入手機(jī)號(hào)碼的編輯框HTML描述如下:

        <input type="text"class="ipt-tel"placeholder="手機(jī)號(hào)"id="phone"maxlength="50">

        可以使用element=driver.find_elements_by_id("phone")查找到界面上的該編輯框。返回值element表示查找結(jié)果對(duì)應(yīng)的list列表。

        登錄按鈕的HTML描述如下:

        <input type="button"value="登錄"class="loginSub"onclick="goPassport2Login();">

        可以使用element=driver.find_elements_by_class_name("loginSub")查找到界面上的該登錄按鈕。

        當(dāng)頁(yè)面的元素既沒(méi)有id屬性也沒(méi)有name屬性時(shí),可以使用xpath來(lái)查找該元素。xpath表示xml元素的路徑,它完全可以替代其他元素(id、name、class_name、tag_name等)定位方式。其HTML描述如下:

        <html>

        <body>

        <form id="inputForm"name="inputForm">

        <input type="text"name="subject"id="subject"value=""placeholder="輸入專題名稱">

        <input type="text"name="author"id="author"value=""placeholder="輸入作者名">

        </form>

        </body>

        <html>

        查找form表單元素,可以使用如下方法:element=driver.find_elements_by_xpath("/html/body/form")。該種方法使用form表單元素在HTML文件中完整路徑位置來(lái)進(jìn)行定位查找。

        當(dāng)然也可以使用element=driver.find_elements_by_xpath("http://*[@id=’inputForm’]")。該種方法是通過(guò)相對(duì)定位來(lái)查找,//表示從匹配選擇的當(dāng)前節(jié)點(diǎn)下繼續(xù)查找;*通配符,表示任意元素節(jié)點(diǎn)。整個(gè)語(yǔ)句表示HTML文件當(dāng)前位置的任意元素節(jié)點(diǎn)下id名為inputForm的元素。

        除了使用*通配符,在xpath中還可以使用文本定位、模糊定位等。例如element=driver.find_elements_by_xpath("http://*//input[starts-with(@id,'sub')]"),表示在HTML文件當(dāng)前位置的任意元素節(jié)點(diǎn)下找到id名以sub開(kāi)頭的節(jié)點(diǎn)元素。

        3.3 Selenium模擬用戶操作

        找到頁(yè)面節(jié)點(diǎn)元素后,需要模擬用戶的操作。例如鍵盤(pán)輸入數(shù)據(jù)、點(diǎn)擊等。上文使用element=driver.find_elements_by_id("phone")找到輸入手機(jī)號(hào)碼的編輯框,可以使用element[0].send_keys(phoneNumber)模擬用戶在該編輯框中輸入手機(jī)號(hào)碼。注意這里使用的是element[0],因?yàn)閒ind_element_by_id的返回結(jié)果是list列表,需要指定取出該列表中指定位置的元素。

        同樣,上文使用element=driver.find_elements_by_class_name("loginSub")找到界面上的登錄按鈕后,可以使用element[0].click(),或者element[0].send_keys(Keys.ENTER),模擬用戶點(diǎn)擊該按鈕。其中Keys.ENTER表示回車鍵。

        3.4 Selenium切換窗口

        當(dāng)Web界面進(jìn)行跳轉(zhuǎn)打開(kāi)新的Web界面時(shí),Selenium需要切換窗口才能在新的Web頁(yè)面進(jìn)行元素節(jié)點(diǎn)查找[6]。具體如下:

        driver.switch_to.window(driver.window_handles[-1])

        語(yǔ)句中window_handles表示W(wǎng)eb窗口界面句柄列表,-1表示切換到最后一個(gè)界面,也就是最新打開(kāi)的界面。如果目前已經(jīng)打開(kāi)了三個(gè)Web窗口界面,上面的語(yǔ)句中將-1改為-2,即可跳轉(zhuǎn)到第二個(gè)Web窗口界面進(jìn)行操作。也可以通過(guò)first_win=driver.current_window_handle獲取當(dāng)前Web窗口界面的handle句柄。后續(xù)如果需要切換回該Web窗口界面時(shí),執(zhí)行driver.switch_to.window(first_win)即可。

        當(dāng)然,HTML中也有iframe標(biāo)簽,表示內(nèi)聯(lián)框架,可以理解為在一個(gè)HTML中內(nèi)嵌一個(gè)子HTML。Selenium不能直接在父HTML中查找到iframe中定義的元素節(jié)點(diǎn),也需要先進(jìn)行切換[7],具體方法如下:

        driver.switch_to.frame(frame_name)

        其中,frame_name表示iframe的名稱。執(zhí)行上述語(yǔ)句后即可跳轉(zhuǎn)到iframe中操作節(jié)點(diǎn)元素。當(dāng)iframe中操作結(jié)束,需要返回到之前的Web窗口界面時(shí),需要執(zhí)行如下語(yǔ)句。

        driver.switch_to.default_content()

        3.5 文件上傳

        當(dāng)在Web界面中點(diǎn)擊文件上傳時(shí),首先需要用戶選擇本地文件。Python中如何實(shí)現(xiàn)自動(dòng)選擇本地文件呢?此時(shí)需要借助pywin32程序包。pywin32程序包包含了Windows系統(tǒng)的Win32 API,能創(chuàng)建和使用COM對(duì)象和圖形窗口界面??梢允褂胮ip install pywin32命令進(jìn)行安裝。

        在使用Selenium Webdriver打開(kāi)Windows文件選擇窗口后,調(diào)用函數(shù)win32_select_file()可以實(shí)現(xiàn)Windows本地文件選擇。

        import win32gui

        import win32con

        def win32_select_file(path):

        dialog=win32gui.FindWindow("#32770","打開(kāi)")#"#32770"表示彈出框的窗口類名

        comboBoxEX32=win32gui.FindWindowEx(dialog,0,"ComboBoxEx32",None)

        comboBox=win32gui.FindWindowEx(comboBox-EX32,0,"ComboBox",None)

        editBox=win32gui.FindWindowEx(comboBox,0,"Edit",None)

        button=win32gui.FindWindowEx(dialog,0,"Button","打開(kāi)(&0)")

        win32gui.SendMessage(editBox,win32con.WM_SETTEXT,None,path)

        win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)

        其中win32_select_file()的參數(shù)path表示要上傳的本地文件的完整路徑。執(zhí)行win32_select_file()函數(shù)后,即設(shè)置了需要上傳的文件,接下來(lái)依舊使用Selenium模擬人為操作,例如鼠標(biāo)點(diǎn)擊等,觸發(fā)文件上傳。

        3.6 保存鏈接地址

        所有上傳文件操作、保存操作結(jié)束后,需要保存畢業(yè)設(shè)計(jì)成果上傳保存后的Web頁(yè)面鏈接。在Selenium中可以使用如下語(yǔ)句獲取當(dāng)前Web頁(yè)面鏈接地址。

        retUrl=driver.current_url

        retUrl即保存當(dāng)前Web頁(yè)面的鏈接地址。如果畢業(yè)設(shè)計(jì)成果上傳后保存的Web頁(yè)面鏈接地址并非當(dāng)前Web界面的鏈接地址,那么可以結(jié)合Selenium切換窗口的操作,最終獲取到畢業(yè)設(shè)計(jì)成果上傳后保存的Web頁(yè)面鏈接地址。

        4 結(jié)語(yǔ)

        本文使用Python+Selenium,實(shí)現(xiàn)對(duì)高校學(xué)生的畢業(yè)設(shè)計(jì)成果自動(dòng)提交保存到管理平臺(tái)功能,測(cè)試結(jié)果表明,Python+Selenium實(shí)現(xiàn)的程序代碼簡(jiǎn)潔凝練,通俗易懂,便于維護(hù),可以大大減少學(xué)生、老師重復(fù)性的繁瑣工作,并且能夠保證提交的質(zhì)量。對(duì)于有類似需求的工作場(chǎng)景,也具有非常高的參考價(jià)值。

        猜你喜歡
        畢業(yè)設(shè)計(jì)頁(yè)面成果
        大狗熊在睡覺(jué)
        刷新生活的頁(yè)面
        高校畢業(yè)設(shè)計(jì)展吸引業(yè)內(nèi)眼球
        玩具世界(2021年6期)2021-04-19 12:15:18
        工大成果
        畢業(yè)設(shè)計(jì)優(yōu)秀作品選登
        基于FPGA的畢業(yè)設(shè)計(jì)實(shí)踐平臺(tái)實(shí)現(xiàn)
        電子制作(2018年9期)2018-08-04 03:31:14
        “走出去”成果斐然
        “健康照明”成果聚焦
        “三醫(yī)聯(lián)動(dòng)”擴(kuò)大醫(yī)改成果
        同一Word文檔 縱橫頁(yè)面并存
        亚洲不卡免费观看av一区二区| 国产在线美女| 999久久久免费精品国产牛牛 | 精品无人区无码乱码毛片国产| 99精品人妻少妇一区二区| 伊人久久大香线蕉免费视频| 亚洲中文字幕乱码一二三区| 国产情侣亚洲自拍第一页| 青娱乐极品视觉盛宴国产视频| 人人做人人妻人人精| 无码专区亚洲avl| 国产亚洲中文字幕一区| 国模冰莲自慰肥美胞极品人体图 | 男女性爽大片视频| 亚洲精品国产综合久久| 国产精品亚洲精品日韩已方| 亚洲精品乱码久久久久久久久久久久| 337p日本欧洲亚洲大胆色噜噜| 国产一区二区在三区在线观看| 少妇无套裸按摩呻吟无呜 | 久久午夜无码鲁丝片直播午夜精品| 欧美日韩国产在线成人网| 日韩一级137片内射视频播放| 性久久久久久| 免费人成视频在线观看视频| AV无码人妻一区二区三区牛牛| 久久亚洲精品国产av| 狠狠躁天天躁中文字幕| 在线视频这里只有精品| 在线一区二区三区免费视频观看| 国产自拍精品一区在线观看| 男女下面进入的视频| 国产精品av在线一区二区三区| 黄色潮片三级三级三级免费| 18禁裸男晨勃露j毛网站| 人人狠狠综合久久亚洲婷婷| 五月婷婷激情六月开心| 高级会所技师自拍视频在线| 一二三四视频社区在线| 无码区a∨视频体验区30秒 | 国产在线一区二区视频免费观看|