• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于WebBrowser的Web自動化操作實(shí)現(xiàn)研究

      2015-12-04 03:33:42楊省偉何秉羲
      關(guān)鍵詞:腳本瀏覽器網(wǎng)頁

      楊省偉,何秉羲

      (1.河南質(zhì)量工程職業(yè)學(xué)院現(xiàn)代教育技術(shù)中心,河南平頂山467000;2.河南大學(xué)計(jì)算機(jī)與信息工程學(xué)院,河南開封475001)

      人們使用Web瀏覽器處理在線事務(wù)時(shí),經(jīng)常需要重復(fù)執(zhí)行某些操作,例如:在教務(wù)管理系統(tǒng)中錄入學(xué)生成績;在辦公自動化系統(tǒng)中處理公務(wù)等。有些常規(guī)操作可能會被頻繁執(zhí)行,消耗大量時(shí)間。目前,常見的解決方法主要有2種:(1)通過模擬鍵盤或鼠標(biāo)操作,在Web頁面內(nèi)移動焦點(diǎn)進(jìn)行定位并輸入,能夠?qū)崿F(xiàn)Web的自動操作,減少手工操作的任務(wù)量,但是完成同樣的操作,需要針對不同的硬件環(huán)境或系統(tǒng)做相應(yīng)調(diào)整。(2)通過執(zhí)行預(yù)編制好的腳本,可以完成更復(fù)雜的任務(wù)。

      本文提出一個(gè)通用的解決方案,通過自定義腳本,利用WebBrowser組件技術(shù)[1],構(gòu)建了一種自動化操作軟件AutoBrowser。該軟件運(yùn)行于客戶端,可以對Web頁面進(jìn)行完全控制,彌補(bǔ)了基于B/S技術(shù)的Web應(yīng)用在客戶端“弱控制”的不足。

      1 瀏覽器的體系結(jié)構(gòu)

      1.1 瀏覽器的架構(gòu)

      瀏覽器包括解析HTTP協(xié)議、解析JavaScript腳本等部件。有些內(nèi)容瀏覽器本身無法顯示,例如Adobe Flash、Java Applet,這些需要利用插件來解決。除此之外,瀏覽器還提供一些輔助功能。瀏覽器本身是C/S結(jié)構(gòu),一般采取分層的設(shè)計(jì)思想來實(shí)現(xiàn)[2],典型架構(gòu)如圖1所示。圖1中,瀏覽器引擎層(Browser Engine)提供了排版引擎的開發(fā)接口,讓開發(fā)者可以不用關(guān)注底層CSS渲染、JavaScript解析等技術(shù)細(xì)節(jié)。本文采用的WebBrowser組件工作于瀏覽器引擎層,是一個(gè)組件類。

      1.2 IE瀏覽器模塊構(gòu)成

      IE瀏覽器(Internet Explorer)是微軟公司推出的應(yīng)用最廣泛的瀏覽器。WebBrowser組件作為IE的核心部件[3],為程序員開發(fā)基于Web的應(yīng)用程序提供了極大的幫助,使用戶能夠在WebBrowser組件提供的窗體中瀏覽網(wǎng)頁、導(dǎo)航網(wǎng)頁。Windows平臺下的IE瀏覽器采用了基于COM技術(shù)的模塊化結(jié)構(gòu),具有重用、擴(kuò)展的功能。

      IE瀏覽器的模塊結(jié)構(gòu)(見表1)為:

      第一層IExplore.exe位于最高層。Windows操作系統(tǒng)啟動IE瀏覽器后,會創(chuàng)建iexplore進(jìn)程。

      第二層Shdocvw.dll提供了導(dǎo)航與瀏覽歷史記錄的功能,它封裝了WebBrowser組件,可以供第三方程序員二次開發(fā)。

      第三層 Mshtml.dll是IE瀏覽器的內(nèi)核層,一般被稱為Trident引擎(即瀏覽器內(nèi)核)。Trident引擎是一款開放的內(nèi)核,負(fù)責(zé)對網(wǎng)頁語法進(jìn)行解釋,提供了CSS渲染,決定了瀏覽器如何顯示網(wǎng)頁的內(nèi)容。Trident引擎被設(shè)計(jì)成一個(gè)軟件組件(模塊),可以供第三方程序員將網(wǎng)頁瀏覽功能加入到他們自行開發(fā)的應(yīng)用程序里。

      第四層WinInet.dll提供了網(wǎng)絡(luò)協(xié)議處理接口,實(shí)現(xiàn)了HTTP協(xié)議與FTP協(xié)議以及緩存功能。

      圖1 瀏覽器架構(gòu)

      表1 IE模塊結(jié)構(gòu)

      1.3 WebBrowser工作原理

      WebBrowser組件是Shdocvw.dll的核心組件。第三方程序員可以使用C++、Visual Basic、C#等多種語言對WebBrowser組件進(jìn)行二次開發(fā)。WebBrowser組件的重要事件如表2所示。

      表2 WebBrowser組件的重要事件

      當(dāng)Web頁面加載完畢時(shí),WebBrowser組件會激發(fā)DocumentComplete事件,此時(shí)調(diào)用自動化操作對象,完成對當(dāng)前頁面的自動化操作。但是,如果頁面包含有多個(gè)子框架(Frame),那么每個(gè)子框架內(nèi)的頁面都會激發(fā)一次DocumentComplete事件,這會造成該事件被重復(fù)激發(fā),且難以判斷什么時(shí)候所有頁面加載完畢。此問題可以利用文獻(xiàn)[4]提供的方法予以解決。

      2 Web自動化軟件的設(shè)計(jì)

      2.1 實(shí)現(xiàn)方案分析

      Web自動化操作軟件有多種實(shí)現(xiàn)方案,其中一種方案是在用戶接口層(見圖1)。這種方案直接控制瀏覽器進(jìn)行操作,運(yùn)行方式類似于瀏覽器的外掛程序。該方案通常采用BHO(Browser Helper Object)技術(shù)實(shí)現(xiàn)[5]。BHO是微軟推出的瀏覽器開放接口標(biāo)準(zhǔn)。通過這個(gè)接口,可以編寫代碼獲取瀏覽器的行為。這種方案的缺點(diǎn)是依賴于瀏覽器主窗口,可擴(kuò)展性差,難以實(shí)現(xiàn)定時(shí)、多任務(wù)等高級功能。另一種方案是:通過直接操縱HTTP數(shù)據(jù)包,進(jìn)行自動化操作。該方案的優(yōu)點(diǎn)是收發(fā)數(shù)據(jù)量少、操作速度快。但是缺點(diǎn)也非常突出,需要解析HTML數(shù)據(jù),解析執(zhí)行JavaScript腳本等。另外,對基于HTTPS協(xié)議的Web站點(diǎn),還需要利用SSL協(xié)議對數(shù)據(jù)進(jìn)行解析,工作量相當(dāng)大。最終,本文選擇基于WebBrowser組件的開發(fā)方案,該方案具有良好的可擴(kuò)展性、可移植性,能夠向操作者實(shí)時(shí)反映執(zhí)行的結(jié)果,在執(zhí)行失敗時(shí)能夠即時(shí)轉(zhuǎn)由人工操作,保障任務(wù)順利完成。

      2.2 軟件架構(gòu)設(shè)計(jì)

      本文設(shè)計(jì)的AutoBrowser軟件系統(tǒng)遵循分層思想,采取MVC框架模型進(jìn)行構(gòu)建[6],由CTaskData、CTaskPage、CMyBrowser三個(gè)基礎(chǔ)類模塊及其他輔助類模塊組成,其整個(gè)結(jié)構(gòu)如圖2所示。

      CTaskData控制輸入輸出數(shù)據(jù),包括自定義的腳本;CTaskPage負(fù)責(zé)在當(dāng)前頁面上執(zhí)行腳本;CMy-Browser是WebBrowser組件的封裝類,處理受激發(fā)的事件;CTaskManager是任務(wù)管理模塊,管理用戶所有正在運(yùn)行和未運(yùn)行的任務(wù);CTaskAuto是核心控制模塊,是系統(tǒng)的中樞,負(fù)責(zé)AutoBrowser組件中所有事務(wù)的調(diào)度處理,比如將用戶自定義腳本輸送到CTask-Page進(jìn)行執(zhí)行,再將結(jié)果輸送到CMyBrowser的圖形接口層進(jìn)行顯示等。如果有文件資源需要下載或上傳,則由CHttpSession開辟新的HTTP會話負(fù)責(zé)完成。

      圖2 AutoBrowser的MVC框架

      2.3 Web頁面的解析

      MSHTML是WebBrowser組件中的一個(gè)COM組件[7],該組件封裝了HTML語言中的所有元素及其屬性,通過其提供的標(biāo)準(zhǔn)接口,可以訪問指定網(wǎng)頁的所有元素。MSHTML提供了豐富的HTML文檔接口,有 IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7 等 7 種。其中,IHTMLDocument只有一個(gè)Script屬性,負(fù)責(zé)管理頁面腳本。通過IHTMLDocument2接口可以得到網(wǎng)頁元素的記錄集合IHTMLElementCollection。通過IHTMLElement接口可以獲得記錄集合中的網(wǎng)頁元素,包括節(jié)點(diǎn)元素的類型與屬性,并完成具體操作。對節(jié)點(diǎn)元素的用戶操作最常見的有鼠標(biāo)單擊操作及鍵盤的文本輸入操作,它們分別對應(yīng)節(jié)點(diǎn)元素的Click事件與put_innerText事件。

      在對節(jié)點(diǎn)元素操作前,需要準(zhǔn)確定位到待操作的元素。定位元素有多種方法,其中一種方法是通過匹配網(wǎng)頁元素的ID屬性進(jìn)行定位。如果網(wǎng)頁元素未定義ID屬性,可以通過匹配其他屬性定位。然而,在當(dāng)今流行的前端Web頁面的設(shè)計(jì)中,常用 Li標(biāo)簽、A標(biāo)簽等接受用戶的鼠標(biāo)單擊操作,并且利用JQuery技術(shù)將具體操作定義在獨(dú)立的腳本代碼中,因此這些頁面元素甚至不需要包含任何屬性[8]。在這種情況下,可以通過頁面元素在整個(gè)文檔中的索引值進(jìn)行定位。

      2.4 操作腳本的設(shè)計(jì)

      實(shí)現(xiàn)Web自動化操作,需要第三方程序員事先定義操作腳本,啟動操作任務(wù)后,通過手工或定時(shí)的方式讓程序自動執(zhí)行操作腳本。為了保持良好的可移植性與可讀性,本文采用XML語言對操作腳本進(jìn)行編碼。腳本的定義需要包含兩個(gè)基本要素:一是用于元素準(zhǔn)確定位的屬性描述;二是對該元素具體操作的描述,且在需要文本輸入時(shí)包含輸入的內(nèi)容。另外,還需要考慮實(shí)現(xiàn)定時(shí)運(yùn)行、驗(yàn)證碼輸入等使用場景。用戶登錄的示例腳本LoginTest的代碼為:

      其中任務(wù)(task)節(jié)點(diǎn)用來描述整個(gè)待執(zhí)行的任務(wù),它包含若干操作頁面(page),page節(jié)點(diǎn)對應(yīng)Web特定頁面,它包含了對該頁面具體操作的子結(jié)點(diǎn)。

      由于種種原因,正常操作Web頁面時(shí),也可能存在操作失敗的情況。操作失敗時(shí),如果不及時(shí)發(fā)現(xiàn)并停止,那么后續(xù)操作將會產(chǎn)生錯(cuò)誤甚至意想不到的結(jié)果。因此,需要對用戶操作結(jié)果進(jìn)行驗(yàn)證。通過定義page的屬性in檢測頁面是否正確進(jìn)行了轉(zhuǎn)移,in屬性存放轉(zhuǎn)向的新地址,如果攜帶有參數(shù)則由ivalue存放。在一些Web頁面的實(shí)現(xiàn)中,客戶端鏈接地址不會有變化,例如利用ASP.NET的Server.Transfer進(jìn)行頁面跳轉(zhuǎn),這時(shí)需要通過<tag type="check"/>進(jìn)行檢驗(yàn)。

      用<page type="index"/>表示通過索引值定位頁面元素,而用<page type="script"/>表示通過JavaScript腳本進(jìn)行操作。如果當(dāng)前頁面支持JQuery,示例腳本LoginTest的page節(jié)點(diǎn)的代碼為:

      此腳本是通過調(diào)用IHTMLWindow2接口的execScript函數(shù)執(zhí)行的,最新版本中execScript函數(shù)已被eval函數(shù)取代了,但仍保留原有功能。

      3 結(jié)語

      本文設(shè)計(jì)的AutoBrowser軟件主要用于Web頁面的自動化操作,可以通過執(zhí)行速度與可靠性兩方面評估其運(yùn)行效果。因?yàn)锳utoBrowser的執(zhí)行速度受多種因素影響,如運(yùn)行環(huán)境的硬件配置、Web服務(wù)器響應(yīng)速度、頁面數(shù)據(jù)量、網(wǎng)絡(luò)傳輸速度、網(wǎng)頁腳本執(zhí)行耗時(shí)等,因此很難給出具有實(shí)際意義的實(shí)驗(yàn)對比數(shù)據(jù)。但從其所處瀏覽器體系結(jié)構(gòu)的層次可知,它更接近于系統(tǒng)底層,比傳統(tǒng)的手工操作速度快,而且能夠?qū)崿F(xiàn)多任務(wù)并發(fā)執(zhí)行。它的可靠性是由操作腳本的校驗(yàn)機(jī)制保證的,在實(shí)際運(yùn)行中,如果遭遇網(wǎng)絡(luò)中斷等情況時(shí),能夠及時(shí)停止后續(xù)操作。但是,導(dǎo)致操作失敗的因素可能是短暫出現(xiàn)的,比如網(wǎng)絡(luò)堵塞等,應(yīng)該引入多次嘗試機(jī)制,甚至根據(jù)不同的情況,執(zhí)行不同的腳本命令等,這些將是下一步研究的內(nèi)容。

      [1] 王瑛,梁楚樵.嵌入式環(huán)境下的瀏覽器定制技術(shù)的實(shí)現(xiàn)[J].武漢理工大學(xué)學(xué)報(bào),2006,28(3):110-111.

      [2] 李文印,周治國,周斌,等.專用瀏覽器/服務(wù)器系統(tǒng)模型的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2004,24(2):76.

      [3] Internet Explorer Architecture[EB/OL].[2015 -01 -24].https://msdn.microsoft.com/en -us/library/aa741312(VS.85).aspx.

      [4] How To Determine When a Page Is Done Loading in WebBrowser Control[EB/OL].[2015 -01 -26].https://support2.microsoft.com/default.aspx?scid=kb%3Ben - us%3B180366.

      [5] 桑慶兵,吳小俊.基于BHO的網(wǎng)站過濾系統(tǒng)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2009,45(31):18-19.

      [6] 劉克.MVC架構(gòu)及其在Web應(yīng)用開發(fā)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(7):57-58.

      [7] MSHTML Reference[EB/OL].[2015 -02 -04].https://msdn.microsoft.com/en - us/library/aa741317(v=vs.85).aspx.

      [8] Jeffrey Sambells,Aaron Gustafson.JavaScript DOM 高級程序設(shè)計(jì)[M].北京:人民郵電出版社,2014.

      猜你喜歡
      腳本瀏覽器網(wǎng)頁
      酒駕
      安奇奇與小cool 龍(第二回)
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
      電子測試(2018年14期)2018-09-26 06:04:24
      基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計(jì)
      電子制作(2018年10期)2018-08-04 03:24:38
      快樂假期
      基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
      電子制作(2017年2期)2017-05-17 03:54:56
      環(huán)球?yàn)g覽器
      再見,那些年我們嘲笑過的IE瀏覽器
      網(wǎng)頁制作在英語教學(xué)中的應(yīng)用
      電子測試(2015年18期)2016-01-14 01:22:58
      河北省| 宜都市| 廉江市| 蒙城县| 宁津县| 台江县| 冕宁县| 阜平县| 邵武市| 潞西市| 武乡县| 栾川县| 洛南县| 海盐县| 双牌县| 保康县| 安阳市| 秭归县| 庄河市| 三明市| 尉氏县| 合肥市| 巩义市| 黑龙江省| 德化县| 宁阳县| 乌拉特后旗| 资兴市| 三明市| 浦北县| 将乐县| 赣榆县| 广西| 东丰县| 密云县| 曲松县| 浏阳市| 紫云| 宜州市| 专栏| 洱源县|