張喜紅,王玉香
(亳州職業(yè)技術(shù)學(xué)院 電子與電氣工程系,安徽 亳州 236800)
移動(dòng)互聯(lián)網(wǎng)時(shí)代的快速到來,使得智能手機(jī)與人形影不離。高校大學(xué)生群體中幾乎人手一部智能手機(jī),已成為他們進(jìn)行人際交往、信息獲取、休閑娛樂、生活購物等活動(dòng)的得力工具。智能手機(jī)給學(xué)生生活帶來了積極意義的同時(shí),也對(duì)大學(xué)課堂產(chǎn)生了巨大的負(fù)面影響,成為當(dāng)前課堂的“隱形殺手”之一,學(xué)生在上課聊QQ,看網(wǎng)絡(luò)小說、打游戲的行為極其普遍,隱形逃課之風(fēng)日趨高漲。有些學(xué)校為了制止這些不良行為,采取上課之前強(qiáng)制收繳手機(jī)等措施。然而,在大力推行“智慧課堂”的時(shí)代下,采用如此霸道的監(jiān)管方式顯得不盡人意,如:學(xué)生在課堂上可能需要應(yīng)用智能手機(jī)進(jìn)行檢索文獻(xiàn)、共享資源等學(xué)習(xí)行為[1-3]。由此可見,探索一套有效的監(jiān)管方式,使智能手機(jī)由課堂“隱形殺手”變?yōu)椤罢n堂助手”,極具意義。
基于上述背景,以亳州職業(yè)技術(shù)學(xué)院現(xiàn)有多媒體教室的硬件資源為基礎(chǔ),兼顧課堂“藍(lán)墨云”班課的使用,基于Python語言設(shè)計(jì)了一款課堂手機(jī)輔助管理系統(tǒng),建立了通過無線路由局域網(wǎng)對(duì)學(xué)生手機(jī)終端行為的監(jiān)管、考評(píng)、激勵(lì)機(jī)制,同時(shí)實(shí)現(xiàn)了教師按需控制局域網(wǎng)接入Internet網(wǎng)絡(luò)。
系統(tǒng)的整體組成結(jié)構(gòu)如圖1所示,由教師電腦終端、無線路由器、學(xué)生智能手機(jī)終端組成。無線路由器WLAN端口接入Internet網(wǎng)絡(luò),教師電腦通過有線或無線方式接入無線路由器,學(xué)生智能手機(jī)終端通過Wifi連接到無線路由器,組建班級(jí)局域網(wǎng)。系統(tǒng)設(shè)計(jì)的基本思路是:智能手機(jī)同一時(shí)段內(nèi)只能選擇WLAN或數(shù)據(jù)流量訪問Internet網(wǎng)絡(luò),即學(xué)生手機(jī)加入班級(jí)局域網(wǎng)指定的Wifi無線路由器后,只能通過此無線路由訪問Internet互聯(lián)網(wǎng),要想通過其他網(wǎng)絡(luò)或數(shù)據(jù)流量訪問Internet互聯(lián)網(wǎng),必須先斷開與班級(jí)局域網(wǎng)的連接。同時(shí),學(xué)生智能手機(jī)網(wǎng)卡的MAC地址具全球唯一性,無線路由器的管理頁面大多給出了當(dāng)前接入設(shè)備的MAC地址信息列表。因此,在事先建立班級(jí)成員手機(jī)MAC地址統(tǒng)計(jì)信息表的基礎(chǔ)上,通過掃描無線路由器接入設(shè)備的MAC地址信息列表,便可實(shí)時(shí)監(jiān)控學(xué)生手機(jī)與班級(jí)局域網(wǎng)的連接狀態(tài),進(jìn)而及時(shí)把握學(xué)生的行為動(dòng)向。
具體實(shí)施流程如下:
①課前教師事先統(tǒng)計(jì)班級(jí)學(xué)生姓名或?qū)W號(hào)與其手機(jī)MAC地址的對(duì)應(yīng)信息表。
②上課時(shí),要求班級(jí)成員通過密鑰接入指定的無線路由,與教師電腦組建局域網(wǎng)。
③教師電腦端通過課堂手機(jī)輔助管理系統(tǒng)軟件,按1min時(shí)間間隔,周期性自動(dòng)提取接入無線路由器的學(xué)生手機(jī)MAC地址列表信息,并與步驟①中的MAC地址信息表進(jìn)行比對(duì),統(tǒng)計(jì)每位學(xué)生在一個(gè)課時(shí)內(nèi)連入指定無線路由網(wǎng)的次數(shù)。
④課程結(jié)束后,將步驟③中得到的每課時(shí)連網(wǎng)次數(shù)直觀展示,并按一定的比例納入平時(shí)成績(jī)考評(píng)體系,進(jìn)而激勵(lì)學(xué)生課堂規(guī)范上網(wǎng)。
⑤當(dāng)教師需要使用“藍(lán)墨云”等Internet互聯(lián)網(wǎng)軟件與學(xué)生開展互動(dòng)教學(xué)時(shí),教師可通過課堂手機(jī)輔助管理系統(tǒng)軟件實(shí)時(shí)開啟與Internet互聯(lián)網(wǎng)的連接。同時(shí),為了防止學(xué)生瀏覽與課堂無關(guān)的Internet互聯(lián)媒體,互動(dòng)結(jié)束后可實(shí)時(shí)斷開與Internet互聯(lián)網(wǎng)的連接。
圖1 系統(tǒng)組成示意圖
鑒于手機(jī)監(jiān)管系統(tǒng)軟件的GUI界面不是很復(fù)雜,GUI界面設(shè)計(jì)采用Python語言提供的Tkinter圖形界面模塊進(jìn)行設(shè)計(jì)[4]。課堂手機(jī)監(jiān)管系統(tǒng)的GUI主界面如圖2所示,界面主要由文本標(biāo)簽控件、按鈕控件及文本輸入控件等三類控件構(gòu)成。各標(biāo)簽控件的作用相對(duì)簡(jiǎn)單,用于顯示軟件的使用步驟說明?!奥窂竭x擇”按鈕用于選擇設(shè)置班級(jí)學(xué)生智能手機(jī)MAC地址信息統(tǒng)計(jì)表;“啟動(dòng)監(jiān)控”與“停止監(jiān)控”按鈕用于啟動(dòng)或停止系統(tǒng)掃描并統(tǒng)計(jì)學(xué)生智能手機(jī)接入無線路由網(wǎng)的次數(shù);“查看結(jié)果”按鈕用于課堂結(jié)束后,向?qū)W生展示在線次數(shù)的統(tǒng)計(jì)結(jié)果;“連接網(wǎng)絡(luò)”與“斷開網(wǎng)絡(luò)”按鈕用于教師實(shí)時(shí)控制無線路由網(wǎng)絡(luò)接入與斷開Internet互聯(lián)網(wǎng)。
使用Tkinter進(jìn)行GUI界面開發(fā),主要包括窗口實(shí)例化、控件定義、控件屬性設(shè)置及控件布局等步驟。窗口的實(shí)例化通過Tk()類實(shí)現(xiàn),如master = Tk()即可創(chuàng)建一個(gè)名為self. master的窗口容器。當(dāng)窗口創(chuàng)建好后,可在窗口中使用title0 = Label(master, text='請(qǐng)按如下說明使用本軟件', font='20', bg='white', fg='blue')格式語句添加文本標(biāo)簽控件,第一項(xiàng)參數(shù)用于指定控件的容器為master窗口容器,其他參數(shù)分別為顯示的文本內(nèi)容、字體大小、背景色、文字顏色。按鈕控件可使用link_internet = Button(master, text='停止監(jiān)控', command= open_internet)格式語句添加,第一項(xiàng)參數(shù)同樣也是指定控件的容器,text參數(shù)為按鈕顯示的文本內(nèi)容,command參數(shù)是按鈕的事件命令,open_internet為自定義的按鈕功能函數(shù)。各控件在容器如何布局,通過Tkinter提供的pack()、grid()兩種方法實(shí)現(xiàn):pack()用于實(shí)現(xiàn)控件自上到下的布局;grid()用于實(shí)現(xiàn)在子容器中按表格布局。如:link_internet.grid(row=0, column=0)可將link_internet控件布局到當(dāng)前容器0行、0列的位置。
圖2 GUI界面圖
課堂手機(jī)監(jiān)管系統(tǒng)軟件獲取當(dāng)前接入無線路由器設(shè)備的Mac地址列表,或管理Internet互聯(lián)網(wǎng)的接入或斷開,都需模擬瀏覽器通過HTTP請(qǐng)求訪問路由器的各個(gè)管理頁面。requests或selenium模塊是Python實(shí)現(xiàn)HTTP請(qǐng)求常用方法[5-6]。requests對(duì)靜態(tài)交互網(wǎng)頁的請(qǐng)求與獲取實(shí)現(xiàn)較為簡(jiǎn)單,但對(duì)于動(dòng)態(tài)網(wǎng)頁需進(jìn)行抓包分析后設(shè)計(jì)請(qǐng)求方式,實(shí)現(xiàn)相對(duì)困難。Selenium是一款用于Web自動(dòng)化測(cè)試的工具包,它提供的webdriver工具可模擬人工操控瀏覽器請(qǐng)求網(wǎng)頁,結(jié)合無界面的PhantomJS瀏覽器,可實(shí)現(xiàn)自動(dòng)化請(qǐng)求網(wǎng)頁[7]。經(jīng)實(shí)際測(cè)試,鑒于通過requests請(qǐng)求無線路由器的URL地址返回為空,最終決定采用Selenium與PhantomJS模擬人工操作本地瀏覽器的方式,實(shí)現(xiàn)無線路由器的無界面控制管理。以登錄無線路由器管理后臺(tái)為例,其關(guān)鍵代碼如下所示:
from selenium import webdriver
import time
password = '填入你自己的密碼'
Routers_URL= 'http://192.168.11.1/'
My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')
My_driver.get(Routers_URL)#模擬請(qǐng)求路由器管理后臺(tái)登錄頁面
time.sleep(1)#等待響應(yīng)近回所需的時(shí)間
My_driver.find_element_by_id('pcPassword').send_keys(password) #模擬在密碼欄輸入登陸密碼
My_driver.find_element_by_id('logIn').click()#模擬單擊登陸按鈕事件
其中My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')語句用于指定無界面瀏覽器PhantomJS的驅(qū)動(dòng)程序安裝路徑;find_element_by_id('pcPassword')語句用于從網(wǎng)頁中定位光標(biāo)到指定的位置;send_keys(password)用于向指定的位置填寫相應(yīng)的內(nèi)容;click()用于模擬鼠標(biāo)單擊指定位置的操作;time.sleep(1)用于實(shí)現(xiàn)休眠等待1s,具體時(shí)長(zhǎng)需依據(jù)網(wǎng)頁返回的響應(yīng)速度決定。
連入無線路由器MAC地址列表信息的提取過程,可通過如下步驟實(shí)現(xiàn):①通過2.2節(jié)中的無界面自動(dòng)化WEB操控方式,進(jìn)入到無線路由器的MAC信息列表頁面,獲得MAC信息列表頁網(wǎng)頁源碼。②從獲得的MAC信息列表網(wǎng)頁源碼中,定位、過濾、提取每個(gè)接入設(shè)備的MAC信息。MAC信息列表的定位、過濾、提取采用Python的正則表達(dá)式實(shí)現(xiàn),關(guān)鍵實(shí)現(xiàn)代碼如下:
#定位到MAC地址列表區(qū)域,提取所有接入設(shè)備MAC地址
R_Mac_List = My_driver.find_element_by_id('wanmac')
now_mac_text= R_Mac_List.text#將MAC地址列表信息轉(zhuǎn)化為文本
now_mac=re.findall(r"[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}"
r":[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}",now_mac_text) #正則表達(dá)式匹配
去除網(wǎng)絡(luò)連接存在故障的情況,在單位時(shí)間內(nèi)統(tǒng)計(jì)學(xué)生手機(jī)MAC地址在無線路由網(wǎng)絡(luò)的存在次數(shù),在一定程度上能夠反映學(xué)生是否接入其他網(wǎng)絡(luò),訪問與課堂無關(guān)的信息情況。具體的實(shí)現(xiàn)方法是:以一定的時(shí)間間隔,周期性的將已知學(xué)生姓名的手機(jī)MAC數(shù)據(jù)表與當(dāng)前獲得的MAC信息列表進(jìn)行對(duì)比,若當(dāng)前獲得的MAC信息列表中存在某已知學(xué)生姓名的手機(jī)MAC地址信息,則將此學(xué)生的簽到次數(shù)加1。關(guān)鍵實(shí)現(xiàn)代碼如下,其中now_mac為當(dāng)前接入路由器的所有MAC地址;self.student_Mac為事先已知學(xué)生姓名的手機(jī)MAC地址數(shù)組;self.timeCount為簽到計(jì)數(shù)器。
def conect_count(self,now_mac):
for i in range(len(now_mac)):
for j in range(len(self.timeCount)):
if now_mac[j] == self.student_Mac[j]:
self.timeCount[j] = self.timeCount[j] + 1;
else:
continue
為了及時(shí)將簽到次數(shù)以直觀的形式呈現(xiàn)給學(xué)生,對(duì)學(xué)生課堂規(guī)范使用手機(jī)起到激勵(lì)、警示作用,課堂教學(xué)結(jié)束時(shí),需點(diǎn)擊圖2所示GUI主界面上的“查看結(jié)果”按鈕,展示本堂課學(xué)生的在線次數(shù)。與“查看結(jié)果”按鈕對(duì)應(yīng)的結(jié)果展示功能函數(shù),采用Python語言提供的matplotlib繪圖工具包實(shí)現(xiàn)[8],結(jié)果展示方式采用柱狀圖模式,具體實(shí)現(xiàn)代碼如下:
def Display_result(self):
try:
plt.figure(u'統(tǒng)計(jì)結(jié)果')
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.size'] = 10
plt.xlabel(u'學(xué)生姓名')
plt.ylabel(u"在線次數(shù)")
plt.bar(range(len(self.student_name)),self.timeCount)
plt.xticks(range(len(self.student_name)),self.student_name,rotation=0)
plt.title(u"在線次數(shù)統(tǒng)計(jì)結(jié)果",fontproperties = 'SimHei', fontsize = 20)
plt.show()
except:
messagebox.showinfo('提示', '運(yùn)行錯(cuò)誤!') # 顯示對(duì)話框
教師電腦采用CPU型號(hào)為Intel(R) Core(TM) i3-4160 3.6GHz,內(nèi)存為4GB,操作系統(tǒng)為Win7-64位的宏機(jī)臺(tái)式電腦,無線路由器選用迅捷FW450R,學(xué)生人數(shù)24名,在12m*7m大小的教室內(nèi)按圖1所示的拓?fù)浣Y(jié)構(gòu)組建網(wǎng)絡(luò),以45min為一課時(shí),測(cè)試系統(tǒng)的各項(xiàng)功能。24名受測(cè)試學(xué)生在線次數(shù)統(tǒng)計(jì)結(jié)果如圖3所示,去除網(wǎng)絡(luò)連接故障因素,可知6,10,16,23,26,17號(hào)學(xué)生在課中接入班級(jí)無線互聯(lián)網(wǎng)的次數(shù)較低,一定程度上客觀反映了這些學(xué)生在課中有不規(guī)范使用手機(jī)的行為;其余學(xué)生在課中的在線次數(shù)達(dá)40次以上,去除瀏覽手機(jī)本地媒體的行為,基本上可排除接入其他網(wǎng)絡(luò)瀏覽與課堂無關(guān)資源的情況。因此,可將此項(xiàng)數(shù)據(jù)按一定的權(quán)重納入平時(shí)成績(jī)的評(píng)定體系,激勵(lì)、警示學(xué)生課中規(guī)范使用手機(jī)。同時(shí),教師通過軟件控制班級(jí)無線局域網(wǎng)接入Internet互聯(lián)網(wǎng)的實(shí)驗(yàn)結(jié)果顯示,在點(diǎn)擊“連接網(wǎng)絡(luò)”按鈕后,整個(gè)班級(jí)局域網(wǎng)可在3~5s的時(shí)間內(nèi)實(shí)時(shí)接入Internet互聯(lián)網(wǎng);在點(diǎn)擊“斷開網(wǎng)絡(luò)”按鈕后,整個(gè)班級(jí)局域網(wǎng)在1~2s的時(shí)間內(nèi)實(shí)時(shí)斷開與Internet互聯(lián)網(wǎng)的連接。
圖3 學(xué)生手機(jī)在線次數(shù)統(tǒng)計(jì)結(jié)果柱狀圖