国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2015-12-04 03:33:42楊省偉何秉羲
河南城建學(xué)院學(xué)報 2015年3期
關(guān)鍵詞:腳本瀏覽器網(wǎng)頁

楊省偉,何秉羲

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

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

本文提出一個通用的解決方案,通過自定義腳本,利用WebBrowser組件技術(shù)[1],構(gòu)建了一種自動化操作軟件AutoBrowser。該軟件運行于客戶端,可以對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è)計思想來實現(xiàn)[2],典型架構(gòu)如圖1所示。圖1中,瀏覽器引擎層(Browser Engine)提供了排版引擎的開發(fā)接口,讓開發(fā)者可以不用關(guān)注底層CSS渲染、JavaScript解析等技術(shù)細(xì)節(jié)。本文采用的WebBrowser組件工作于瀏覽器引擎層,是一個組件類。

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è)計成一個軟件組件(模塊),可以供第三方程序員將網(wǎng)頁瀏覽功能加入到他們自行開發(fā)的應(yīng)用程序里。

第四層WinInet.dll提供了網(wǎng)絡(luò)協(xié)議處理接口,實現(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頁面加載完畢時,WebBrowser組件會激發(fā)DocumentComplete事件,此時調(diào)用自動化操作對象,完成對當(dāng)前頁面的自動化操作。但是,如果頁面包含有多個子框架(Frame),那么每個子框架內(nèi)的頁面都會激發(fā)一次DocumentComplete事件,這會造成該事件被重復(fù)激發(fā),且難以判斷什么時候所有頁面加載完畢。此問題可以利用文獻(xiàn)[4]提供的方法予以解決。

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

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

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

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

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

CTaskData控制輸入輸出數(shù)據(jù),包括自定義的腳本;CTaskPage負(fù)責(zé)在當(dāng)前頁面上執(zhí)行腳本;CMy-Browser是WebBrowser組件的封裝類,處理受激發(fā)的事件;CTaskManager是任務(wù)管理模塊,管理用戶所有正在運行和未運行的任務(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組件中的一個COM組件[7],該組件封裝了HTML語言中的所有元素及其屬性,通過其提供的標(biāo)準(zhǔn)接口,可以訪問指定網(wǎng)頁的所有元素。MSHTML提供了豐富的HTML文檔接口,有 IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7 等 7 種。其中,IHTMLDocument只有一個Script屬性,負(fù)責(zé)管理頁面腳本。通過IHTMLDocument2接口可以得到網(wǎng)頁元素的記錄集合IHTMLElementCollection。通過IHTMLElement接口可以獲得記錄集合中的網(wǎng)頁元素,包括節(jié)點元素的類型與屬性,并完成具體操作。對節(jié)點元素的用戶操作最常見的有鼠標(biāo)單擊操作及鍵盤的文本輸入操作,它們分別對應(yīng)節(jié)點元素的Click事件與put_innerText事件。

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

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

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

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

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

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

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

3 結(jié)語

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

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

[2] 李文印,周治國,周斌,等.專用瀏覽器/服務(wù)器系統(tǒng)模型的設(shè)計與實現(xiàn)[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)研究與實現(xiàn)[J].計算機(jī)工程與應(yīng)用,2009,45(31):18-19.

[6] 劉克.MVC架構(gòu)及其在Web應(yīng)用開發(fā)中的應(yīng)用[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è)計[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è)計
電子制作(2018年10期)2018-08-04 03:24:38
快樂假期
基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
電子制作(2017年2期)2017-05-17 03:54:56
環(huán)球瀏覽器
再見,那些年我們嘲笑過的IE瀏覽器
網(wǎng)頁制作在英語教學(xué)中的應(yīng)用
電子測試(2015年18期)2016-01-14 01:22:58
平陆县| 融水| 红桥区| 兴安县| 凤凰县| 孟州市| 依兰县| 松潘县| 奉节县| 商水县| 日喀则市| 潞城市| 集安市| 菏泽市| 南川市| 游戏| 江阴市| 仪征市| 新干县| 临湘市| 灵山县| 安陆市| 天长市| 泽州县| 吉木乃县| 崇信县| 阿瓦提县| 康马县| 金寨县| 长治县| 水城县| 铜鼓县| 永登县| 博兴县| 昌平区| 久治县| 惠安县| 巫山县| 德格县| 天台县| 镇平县|