界面元素
我們在[簡介][簡介]一章中曾提到,RPA的一大特色是“無侵入”,也就是說,雖然RPA是配合其他軟件一起工作的,但并不需要其他軟件提供接口。而是直接針對其他軟件的操作界面,模擬人的閱讀和操作。但是,
一般的軟件界面上都會有多個輸入框、按鈕,計算機怎么知道我們到底要操作什么地方呢?本章所述的“界面元素”將解決這個問題。
什么是界面元素
如果您之前了解什么是“控件”,對不起,請先暫時忘掉這個概念。因為“控件”和“界面元素”有共同點,但又不完全一樣,一定要盡量避免概念混淆。
除了IT專家之外,一般人在使用計算機的時候,都是在和操作系統(tǒng)的圖形界面打交道。無論是常用的Windows或Mac OS X,還是非IT人士不太常用的Linux,都有一套自己的圖形界面。隨著Web瀏覽器的大行其道,也有越來越多的圖形界面選擇在瀏覽器上展現(xiàn)。這些圖形界面各有各的特色,但當(dāng)我們用鼠標(biāo)點擊的時候,其實鼠標(biāo)下面都是一個小的圖形部件,我們把這些圖形部件稱為“界面元素”。
比如,下圖是一個普通的Windows窗口,也是典型的圖形用戶界面。在這個窗口中,有哪些界面元素呢?
首先,上面的菜單欄里面的各個選項,如“文件”、“主頁”、“共享”、“查看”都是獨立的界面元素。菜單欄里面的圖標(biāo)和下面的文字,如“復(fù)制”、“粘貼”等都是獨立的界面元素,左邊的導(dǎo)航欄里面的“快速訪問”、“桌面”、“下載”等都是獨立的界面元素;當(dāng)然,窗口主要區(qū)域(紅框包含的范圍)里面顯示的每個文件也都是獨立的界面元素。

界面元素之間還有嵌套的組合關(guān)系。比如,紅框包含的范圍是一個大的界面元素,里面的每個文件又是獨立的界面元素。
在UiBot中,界面元素的作用,就是作為“有目標(biāo)”的命令中的目標(biāo)使用。
[前文][可視化視圖]中提到,UiBot在命令區(qū)已經(jīng)放置了很多作為“預(yù)制件”使用的命令。其中,最常用的是如圖所示的幾類:

其中,“界面元素”和“文本”類別下面的所有命令,都是有目標(biāo)的;“鼠標(biāo)”和“鍵盤”下面的包含“目標(biāo)”兩個字的命令,也都是有目標(biāo)的。如下圖紅框所示。

所謂有目標(biāo)的命令,就是在命令中指定了一個界面元素。在運行的時候,會先查找這個界面元素是否存在。如果存在,則操作會針對這個界面元素進(jìn)行。比如界面元素是一個按鈕,那么命令“點擊目標(biāo)”就是點擊這個界面元素。如果不存在,則會反復(fù)查找,直到超過指定的時間(也稱為“超時”。超時時間可以在“屬性”中設(shè)置),會輸出一個出錯信息,流程也會直接停止運行。
相反,對于無目標(biāo)的命令,在命令中就不需要指定界面元素了。比如“模擬點擊”命令是沒有目標(biāo)的,在運行的時候,鼠標(biāo)當(dāng)前在什么位置,就點擊什么位置;再比如“模擬按鍵”命令也是沒有目標(biāo)的,在運行的時候,鍵盤的輸入焦點在什么位置,就在什么位置模擬一個按鍵操作。
顯然,在用UiBot的時候,應(yīng)該優(yōu)先使用有目標(biāo)的命令,因為有目標(biāo)的命令會準(zhǔn)確很多。只有當(dāng)找不到目標(biāo)的時候,才退而求其次,使用無目標(biāo)的命令。
所以,在用UiBot的時候,如何選取一個目標(biāo)是很關(guān)鍵的。只要準(zhǔn)確的選到了目標(biāo),模擬操作相對來說就比較簡單了。下面介紹選取目標(biāo)的方法。
目標(biāo)選取
UiBot提供了一種全自動的選取目標(biāo)的方式,我們以“鼠標(biāo)”類別中的“點擊目標(biāo)”命令為例來說明。
假設(shè)我們要做一個最簡單的流程,只有一個步驟:點擊Windows的開始菜單按鈕(默認(rèn)位置在左下角)。首先,新建一個流程,然后,打開其中唯一的流程塊,接著,在“可視化”視圖中找到“點擊目標(biāo)”命令,用拖動或者雙擊的方式將其插入組裝區(qū)。以上步驟您應(yīng)該已經(jīng)很熟悉了,如果還不熟悉,請回過頭去閱讀[基本概念][基本概念]這一章。
在組裝區(qū)中,現(xiàn)在已經(jīng)有一條命令了。我們會注意到,這條命令上有一個按鈕,文字是“選擇目標(biāo)”,還有一個瞄準(zhǔn)器樣子的圖標(biāo)。如下圖所示:

點擊這個按鈕,UiBot的界面暫時隱藏起來了,出現(xiàn)了一個紅邊藍(lán)底的半透明遮罩,我們稱之為“目標(biāo)選擇器”。鼠標(biāo)移動到什么地方,這個目標(biāo)選擇器就出現(xiàn)在什么地方,直到我們單擊鼠標(biāo)左鍵,目標(biāo)選擇器消失,UiBot的界面重新出現(xiàn)。在按下的時候,目標(biāo)選擇器所遮住的界面元素,就是我們選擇的目標(biāo)。
前文提到,界面元素可能是嵌套的,鼠標(biāo)所在的位置,可能已經(jīng)落到了多個界面元素的范圍之內(nèi)。此時,目標(biāo)選擇器會自動選擇您最有可能需要的界面元素,并將其遮住。所以,在按下鼠標(biāo)之前,請先耐心移動鼠標(biāo),直到目標(biāo)選擇器不多不少的恰好遮住了您要操作的界面元素為止。
我們可以試一下,用目標(biāo)選擇器遮住開始菜單按鈕,注意是恰好遮住,不多不少。當(dāng)遮罩變成了下圖所示的狀態(tài)時,再單擊左鍵完成選擇。當(dāng)然,下圖是在Windows 10操作系統(tǒng)中的樣子,對于其他版本的Windows操作系統(tǒng),樣子可能會有區(qū)別,但原理不變。

一旦選中之后,UiBot的界面重新出現(xiàn),剛才按下的“選擇目標(biāo)”按鈕也變成了目標(biāo)界面元素的縮略圖,這個縮略圖僅供參考,幫助您記得剛才選中的是哪個目標(biāo),而不會對流程的運行有任何的影響。而且,這個縮略圖實際上還是一個按鈕,按下去以后,作用和剛才的“選擇目標(biāo)”一模一樣。如果前面選擇的目標(biāo)不合適,或者不小心選錯了,按這個按鈕重來一次就好。
對于有目標(biāo)的命令,我們稍微留意一下,就會發(fā)現(xiàn)在命令的屬性中,有一條屬性被稱為“目標(biāo)”。當(dāng)我們還沒有選擇目標(biāo)的時候,這個屬性的值是一對花括號 {},如下圖左(此時實際上沒有選擇目標(biāo),所以如果運行的話,是一定會出錯的)。而當(dāng)我們選擇了目標(biāo)以后,這個屬性的值會比較長,但仍然是被一對花括號所包圍起來的,如下圖右。

不妨把這個長長的值粘貼到這里,它完整的樣子其實是:
{"wnd":[{"app":"explorer","cls":"Shell_TrayWnd"},{"cls":"Start","title":"開始"}]}
當(dāng)我們在[后文][語言參考]中學(xué)習(xí)完UiBot的編程語言BotScript以后,就會知道這一長串內(nèi)容實際上是BotScript中的一個“字典”數(shù)據(jù)類型。當(dāng)然,現(xiàn)在并不需要掌握這些細(xì)節(jié),只要知道這是一段特殊的數(shù)據(jù)即可。UiBot在運行流程的時候,根據(jù)這段數(shù)據(jù),就可以尋找我們指定的界面元素了。
如果您有過Windows的應(yīng)用開發(fā)經(jīng)驗(如果沒有,也沒關(guān)系,這一段可以跳過去,不影響后續(xù)閱讀),就會知道Windows上的應(yīng)用程序?qū)嶋H上有很多開發(fā)框架,包括SDK、MFC、WTL、WinForm、WPF、QT、Java等等,如果再算上運行在IE和Chrome瀏覽器中的Web應(yīng)用,類型就更多了。這些應(yīng)用程序其實都提供了界面元素的查找、操作接口,從技術(shù)上來說,UiBot無非就是調(diào)用這些接口而已。但是,這些接口的調(diào)用方法各不相同,甚至差異很大,即使是IT專家,也很難在短時間內(nèi)對所有這些接口都駕輕就熟,更不用說一般用戶了。
但如果用UiBot,它們都是一樣的“界面元素”,對它們進(jìn)行查找和操作沒有任何差異。比如,MFC程序中可能有一個按鈕,Chrome瀏覽器中可能也有一個按鈕,看起來都是按鈕,但對這兩個按鈕分別模擬點擊,技術(shù)上的差異幾乎可以說是天壤之別。而在UiBot中,您完全無需關(guān)心這些區(qū)別,UiBot已經(jīng)把這些差異幫我們抹平了。從而實現(xiàn)了“強大”、“簡單”、“快捷”三個指標(biāo)的統(tǒng)一及平衡。
目標(biāo)編輯
在上一節(jié)中,我們看到UiBot的目標(biāo)選擇器是自動工作的。只要我們把鼠標(biāo)移動到希望作為目標(biāo)的界面元素上,遮罩會恰好遮住這個界面元素,并且會生成一段數(shù)據(jù),UiBot在運行的時候,用這段數(shù)據(jù)即可找到目標(biāo)。
當(dāng)然,凡是自動工作,都難免會出錯。在使用目標(biāo)選擇器的時候,常見的問題是:
- 無論如何移動鼠標(biāo),都無法使遮罩恰好遮住要作為目標(biāo)的界面元素(通常是遮罩太大,遮住了整個窗口)
- 遮罩可以恰好遮住界面元素,但用生成的數(shù)據(jù)查找目標(biāo)時,發(fā)生了:
- 錯選:能找到界面元素,但找到的界面元素不是我們當(dāng)初選取的
- 漏選:我們當(dāng)初選取的界面元素明明存在,卻找不到了
對于第一種情況,也就是無法遮住目標(biāo)的情況,我們會在后面用比較多的篇幅詳細(xì)敘述。這里主要討論的是第二種情況,也就是明明可以遮住目標(biāo),但在運行的時候,卻發(fā)生錯選或漏選的情況。
我們在上一節(jié)中提到,當(dāng)選取目標(biāo)時,UiBot會生成類似于這樣的一串?dāng)?shù)據(jù),用來描述目標(biāo):
{"wnd":[{"app":"explorer","cls":"Shell_TrayWnd"},{"cls":"Start","title":"開始"}]}
UiBot在運行流程的時候,就是根據(jù)這串?dāng)?shù)據(jù)中的描述,來查找目標(biāo)的。所以,當(dāng)發(fā)生錯選或者漏選的時候,實際上就是這串?dāng)?shù)據(jù)出現(xiàn)了問題,需要對它進(jìn)行修改。
如何修改呢?我們首先在“屬性”欄,找到“目標(biāo)”屬性,這串?dāng)?shù)據(jù)就顯示在后面的輸入框里。既然是輸入框,理論上可以直接編輯其內(nèi)容,但輸入框太小,編輯起來非常困難。需要修改目標(biāo)的時候,推薦按輸入框右邊的按鈕,如圖中紅框所示:

按下這個按鈕,會彈出一個“目標(biāo)編輯器”的窗口。上半部分是縮略圖,表示作為目標(biāo)的界面元素的大致樣子,UiBot在查找目標(biāo)的時候,并不會使用這張圖片,僅僅是讓您查閱參考的。下半部分是“控件篩選器”,把描述目標(biāo)的那串?dāng)?shù)據(jù)用一個樹形結(jié)構(gòu)重新展示出來了,如圖所示:

實際上,這個樹形結(jié)構(gòu)里面,保存的是界面元素的某些特征,每一項都是一個特征,這些特征是UiBot自動選取的,只有當(dāng)這些特征全部滿足的時候,才會認(rèn)為找到了界面元素。而且,由于界面元素是相互嵌套的,UiBot不僅會記錄作為目標(biāo)的界面元素的特征,還會保存它的上面若干級的界面元素的特征。每一級的特征都必須全部滿足才行。
以上圖中Windows的開始菜單按鈕為例,其中0: Object那一行及其下面的內(nèi)容,代表的是開始菜單按鈕的上一級界面元素(實際上是Windows任務(wù)欄)的特征,而1: Object那一行及其下面的內(nèi)容,代表的才是開始菜單按鈕本身的特征。在流程運行的時候,UiBot會逐級查找,首先找到第一級的Windows任務(wù)欄,然后再在任務(wù)欄里面,找所有特征全部滿足的開始菜單按鈕。
這樣嚴(yán)格的特征匹配,顯然很容易造成“漏選”。比如,我們可以看到,Windows為開始菜單按鈕設(shè)定了一個“標(biāo)題”,也就是title那一行,其內(nèi)容是“開始”(這個標(biāo)題通常不會讓用戶看到,但卻是實際存在的)。UiBot會把這個標(biāo)題作為特征的一部分,因為一般來說,按鈕的標(biāo)題是不會變的。但是,如果有一天,這個按鈕的標(biāo)題發(fā)生了變化,就造成了漏選。
那么,該怎么修改呢?我們看到,在title前面有一個勾選框,默認(rèn)是處于已勾選狀態(tài)的。只需要點一下這個勾選框,將其置為未勾選的狀態(tài),UiBot在找界面元素的時候,就不會再使用這個特征,即使標(biāo)題發(fā)生了變化,也能找到。
但是,如果去掉了太多的特征,漏選是不太容易發(fā)生了,卻會發(fā)生錯選。舉個極端一些的例子:如果把cls: "Start"和title: "開始"這兩行全都取消勾選,顯然,0: Object所代表的Windows任務(wù)欄下面的任何一個界面元素,就都可以滿足條件了,這就造成了錯選。
所以,如果界面元素比較復(fù)雜,或者特征經(jīng)常發(fā)生變化,如何準(zhǔn)確的編輯目標(biāo),既不發(fā)生錯選也不發(fā)生漏選,還是需要一定技巧的。很遺憾,這方面并沒有特定的規(guī)則,只能多多嘗試,積累經(jīng)驗。下面有幾條公共的經(jīng)驗,請讀者先記住,然后再在實踐中總結(jié)自己的經(jīng)驗。
- 有的特征名稱您可能暫時不理解,比如
cls、aaname等,可以暫時不管它們; - 善用通配符
*,這個通配符代表“匹配任意內(nèi)容”。比如有一個界面元素,其title特征的值是“姓名:張三”,后面的“張三”可能會變,但前面的“姓名:”不變。所以,可以用title: "姓名:*"來作為特征,而不是把這條特征去掉; - 去掉特征的時候要慎重。因為去掉特征雖然可以減少漏選,但會增加錯選。在流程運行的時候,漏選一般比較容易發(fā)現(xiàn),但錯選未必能馬上發(fā)現(xiàn)。
關(guān)于最后一條,值得特別說明一下:UiBot在運行一個流程的時候,大多數(shù)的“有目標(biāo)”命令在找不到目標(biāo)的時候,都會拋出一個異常(除非是“判斷目標(biāo)是否存在”這樣的命令),流程會馬上停下來,并且報錯(除非您使用了Try...Catch來捕獲異常,具體用法請參考[后文][語言參考])。所以比較容易發(fā)現(xiàn)。而當(dāng)發(fā)生錯選的時候,UiBot并不知道,還會繼續(xù)往下運行,錯誤就不太容易發(fā)現(xiàn)了。
最后,需要提醒的是:同樣的界面元素,在不同的操作系統(tǒng)、不同的瀏覽器上,可能特征也會發(fā)生變化。特別是IE和Chrome瀏覽器,在顯示同一個頁面的時候,同樣的界面元素可能會有完全不同的特征,而且,對于IE,還會把版本號作為一條特征。如下圖所示,同樣用IE和Chrome打開百度的首頁,并且把百度的搜索框作為目標(biāo)來選取,其特征具有較大的差異。

所以,在用UiBot制作流程,并且在別人的計算機上使用的時候,請盡量保持開發(fā)環(huán)境和生產(chǎn)環(huán)境的一致性,以減少不必要的錯誤。
進(jìn)階:目標(biāo)選取之前的設(shè)置
在用遮罩選取目標(biāo)的時候,很常見的一種情況是:遮罩無論如何只能遮住整個窗口,或窗口的客戶區(qū),而無法選取里面的具體界面元素。如下圖,只能選中Chrome瀏覽器的整個頁面,不能選取里面的輸入框和按鈕。

對于這種情況,有兩種可能性,一種是界面真的無法選?。ㄎ覀儠赱下一章][無目標(biāo)命令]詳細(xì)討論),另一種是界面其實可以選取,但沒有正確的設(shè)置。哪些界面需要設(shè)置才能正常選取呢?下面做一個總結(jié)。
Chrome瀏覽器
Chrome瀏覽器需要安裝擴(kuò)展程序,并啟用了擴(kuò)展程序,才能正常選取。請留意您的Chrome瀏覽器地址欄右邊的一排小圖標(biāo),要有如下圖所示的這個圖標(biāo)(顏色可能是灰色,但不影響正常工作)才行,鼠標(biāo)移動上去,還有文字提示“UiBot Native Message Plugin”。

如果沒有安裝擴(kuò)展程序,則需要遵循以下步驟進(jìn)行安裝:
- 關(guān)閉Chrome瀏覽器;
- 打開UiBot Creator,隨便選擇一個流程。在菜單中選擇“幫助”->"安裝Chrome擴(kuò)展";
- 打開Chrome瀏覽器,稍等片刻,瀏覽器會提示已添加新的擴(kuò)展,如下圖。此時請務(wù)必選擇“啟用擴(kuò)展程序”;

- 如果仍然有問題,請按照下圖所示,打開Chrome的擴(kuò)展程序管理功能,并啟用UiBot Native Message Plugin。

除了IE、Chrome瀏覽器之外,我們還經(jīng)常用到百度瀏覽器、360安全瀏覽器、QQ瀏覽器等國產(chǎn)瀏覽器。這些瀏覽器都采用了Chrome內(nèi)核或IE內(nèi)核,理論上UiBot也可以支持獲取其中的界面元素。但是,由于其設(shè)置方式各不相同,還經(jīng)常發(fā)生變化,為了簡單起見,推薦大家在RPA流程中還是使用原生的Chrome瀏覽器或IE瀏覽器。
跨域網(wǎng)頁
有時候,在一個網(wǎng)頁當(dāng)中,會通過引用的方式,或者iframe嵌套的方式,在其中內(nèi)嵌一個其他域名下的網(wǎng)頁。對于這種情況,我們稱為“跨域網(wǎng)頁”。在這種情況下,出于安全的考慮,不同的瀏覽器會有不同的策略。我們來實際體驗一下:
打開Chrome瀏覽器,瀏覽http://mail.qq.com,即QQ郵箱頁面,切換到QQ登錄,然后按F12鍵,打開Chrome的開發(fā)者模式,按Ctrl+Shfit+C組合鍵,進(jìn)入Chrome的元素查看功能,并將鼠標(biāo)移動到“QQ登錄”區(qū)域,左鍵點擊后,我們會看到如下圖的提示:

可以很清楚的看到,當(dāng)前網(wǎng)頁的域名是mail.qq.com,但在其中又嵌入了一個域名為xui.ptlogin2.qq.com的網(wǎng)頁。兩個域名不完全一樣,這就是典型的跨域網(wǎng)頁。
在這種情況下,IE瀏覽器并不會對跨域做特殊處理。而Chrome瀏覽器出于安全因素考慮,會禁止對iframe下的頁面進(jìn)行訪問,包括元素的選取、執(zhí)行JS等操作。也就是說,我們無法選取QQ登錄中的界面元素,包括登錄QQ號、QQ密碼等,更無法自動化操作。
怎么處理這種情況呢?要么選擇用IE瀏覽器,要么通過啟動參數(shù)命令,來關(guān)閉Chrome的安全設(shè)置。下文敘述Chrome的安全設(shè)置關(guān)閉方法,請注意,在關(guān)閉之前,需要先選擇一個臨時目錄用于存放Chrome的用戶數(shù)據(jù),假設(shè)選為D:\temp。
右鍵點擊Google Chrome圖標(biāo),選擇 屬性->快捷方式,在“目標(biāo)”一欄填入啟動參數(shù),具體格式如下:<Chrome安裝路徑> --disable-web-security --user-data-dir=用戶數(shù)據(jù)目錄。比如,我們的Chrome安裝在C:\Program Files (x86)\Google\Chrome\Application\chrome.exe下,用戶數(shù)據(jù)目錄為D:\temp,那么套用格式,我們在Chrome目標(biāo)窗口應(yīng)填入C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security --user-data-dir=D:\temp,如下圖:

在經(jīng)過以上操作后,我們再打開Chrome,會看到Chrome地址欄會有如下的提示,并且安裝的擴(kuò)展程序也消失不見了。不要著急,這是因為Chrome的用戶數(shù)據(jù)目錄發(fā)生了變化,只要重新安裝UiBot的Chrome擴(kuò)展程序,即可自動化操作。

經(jīng)過以上設(shè)置,Chrome即可支持跨域訪問。
SAP客戶端程序
SAP客戶端程序需要在設(shè)置中打開腳本支持,才能正常選取。我們以SAP 710客戶端為例:
- 打開SAP客戶端程序,進(jìn)入登錄主界面;
- 輸入rz11事務(wù)碼并進(jìn)入相應(yīng)界面;

- 在事務(wù)界面輸入sapgui/user_scripting,并點擊display;

- 查看Current Value當(dāng)前值選項,如果為TRUE則已經(jīng)開打選項,不需要做任何改動;如果為FALSE則需要點擊Change Value改變此處為TRUE;

- 點擊設(shè)置按鈕,選擇Options項;

- 切換到Scripting選項卡,勾選"Enable Scripting"選項,并取消勾選"Notify When a Script Attaches to Running Man GUI"和"Notify When a Script Opens a Connection"選項。

設(shè)置完成后,即可象普通的Windows軟件一樣,用UiBot對SAP客戶端進(jìn)行界面元素的獲取和操作。除了前文中介紹的“鼠標(biāo)點擊”、“鍵盤輸入”等操作之外,我們來看一個新的例子,用UiBot自動設(shè)置單選框的內(nèi)容:
在“界面元素”類的命令下,找到“設(shè)置元素勾選”命令,拖動插入到組裝區(qū)。按下“查找目標(biāo)”,可以看到UiBot的界面元素選擇遮罩可以準(zhǔn)確的遮住SAP客戶端中每個單選框的位置。選中我們關(guān)注的單選框,并在命令屬性欄的“是否勾選”選擇“是”即可。如圖所示:

運行此流程,即可看到SAP客戶端的單選框被UiBot自動設(shè)置為“Display inbound call”一項。
Java程序
UiBot支持Swing、AWT、JNPL、Applet等多種Java應(yīng)用程序。除Swing以外,其他Java程序都需要安裝Java擴(kuò)展程序。
可以按照如下步驟去安裝Java擴(kuò)展程序:
打開UiBot Creator,隨便選擇一個流程。在菜單中選擇“幫助”->"安裝Java擴(kuò)展";
安裝成功之后,UiBot Creator將會有對應(yīng)的安裝成功提示出現(xiàn)。需要注意的是,如果需要操作的Java程序是以管理員權(quán)限進(jìn)行安裝,那么同樣需要以管理員權(quán)限啟動UiBot Creator,才能順利安裝Java擴(kuò)展程序。
安裝后,即可象普通的Windows軟件一樣,用UiBot對Java程序進(jìn)行界面元素的獲取和操作。
進(jìn)階:網(wǎng)頁目標(biāo)
目前,越來越多的PC軟件系統(tǒng)都選擇采用B/S(Browser/Server)架構(gòu),用戶無需額外安裝軟件,只需要采用瀏覽器即可直接使用。這種B/S架構(gòu)的軟件系統(tǒng)給RPA帶來了便利,因為有很多辦法可以查找和操作瀏覽器中的網(wǎng)頁界面元素,不至于像很多C/S(Client/Server)的PC軟件系統(tǒng)一樣根本無法獲取到界面元素。
但是,由于查找和獲取網(wǎng)頁界面元素的辦法很多,也帶來了更高的復(fù)雜度,往往需要一些特殊的技巧,本節(jié)特別講述這些技巧。
我們先來看一個例子,如下圖,展示了用Chrome瀏覽器顯示的百度主頁上的一個二維碼,以及UiBot獲取到的特征信息:

可以看到,這個網(wǎng)頁上的界面元素的特征分為兩部分,一部分是wnd信息,另一部分是html信息。wnd信息和其他C/S軟件類似,而html信息則是其他C/S軟件所不具備的。實際上,wnd信息標(biāo)明了這個網(wǎng)頁所在的瀏覽器窗口,html信息才是網(wǎng)頁上的界面元素的關(guān)鍵信息。下面針對html這部分特性進(jìn)行解釋。這里會需要您了解一點html的基礎(chǔ)知識,當(dāng)然,不太了解也沒關(guān)系,跟著我們進(jìn)行一些實際操作,自然能夠掌握這些特征應(yīng)該如何運用。
-
html:代表這是一個網(wǎng)頁界面元素; -
url:對應(yīng)瀏覽器地址欄中顯示的URL,其實并不參與界面元素的特征匹配。僅在“綁定外部瀏覽器”命令中(在“瀏覽器”類命令中可以找到)用到,用于選擇想要綁定的瀏覽器活動標(biāo)簽頁; -
title:與url類似,對應(yīng)瀏覽器標(biāo)簽頁的標(biāo)題,不參與界面元素的特征匹配,也僅在“綁定外部瀏覽器”命令中使用; -
tagName:代表這個網(wǎng)頁界面元素的html標(biāo)簽類型,常見的有div、a、input等等。熟悉html的讀者對此一定倍感親切,不熟悉也沒關(guān)系,打個比方:如果說html代表人類,那么tagName則代表這個元素是亞洲人、美洲人或者歐洲人; -
attrMap:代表這個網(wǎng)頁界面元素的更具象的html描述,我們同樣拿上面這個比方:attrMap就像是這個元素的戶口本,更為詳細(xì)的描述了這個元素屬于哪個國家和省份,父母是誰,是否獨生子,等等; -
index:一般起輔助作用,說明在滿足特征條件情況下,元素出現(xiàn)的順序。UiBot的index是從數(shù)字1開始的,當(dāng)index沒有填寫或取0時,則會選擇第一個出現(xiàn)的元素。
以上說明可能比較枯燥,我們以一個具體的例子來說明網(wǎng)頁目標(biāo)的獲取方法。我們經(jīng)常希望用RPA自動查閱電商網(wǎng)站上某種商品的銷量,并保存下來。比如,需要在天貓上獲取Intel i5 8500這種商品的月銷量,這個數(shù)字在天貓頁面上的固定位置有顯示,如圖:

當(dāng)我們用RPA來自動獲取這個數(shù)字的時候,根據(jù)前面所學(xué)的內(nèi)容,我們通常會這樣操作:
- 從UiBot Creator的命令區(qū)選擇“獲取元素文本”命令,如下圖:

- 在"獲取元素文本"命令上點擊“查找目標(biāo)”按鈕,并選擇銷量數(shù)字,如Intel i5 8500頁面的"98",如下圖:

- 用“輸出調(diào)試信息”命令查看抓取到的值(當(dāng)然,也可以用于其他用途,如轉(zhuǎn)換成數(shù)字、保存到Excel表格等,本文暫不贅述其他用途),如下圖:

看起來,好像工作得很好,毫無問題的獲得了Intel i5 8500的月銷量:98。但是,如果我們在其他商品上再去運行這個流程(使用Chrome瀏覽器,只需切換頁面的標(biāo)簽即可,UiBot始終會在激活的標(biāo)簽工作),就會發(fā)現(xiàn)出問題了。

可以看到,在等待一定時間之后,UiBot最終因為沒有找到目標(biāo)而拋出了異常。那么,問題到底出在什么地方?我們應(yīng)該如何做,才能讓UiBot順利找到目標(biāo)呢?
點擊"獲取元素文本"命令,查看命令的屬性,并具體打開“目標(biāo)”屬性進(jìn)行查看,如下圖:

細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)了:原來"aaname"這條特征已經(jīng)被固定在"98"了。這顯然是不合理的:我們本來就是為了獲取銷量,如果把銷量的數(shù)值98也加到特征里面,那是毫無意義的!因為銷量一旦發(fā)生變化,特征就無法匹配了,造成“漏選”的問題。怎么辦呢?我們可以很自然的想到:取消aaname特征的勾選狀態(tài),或把aaname的特征采用"*"進(jìn)行通配,即可跳過這條造成“漏選”的特征。如下圖:

請注意,這里不必糾結(jié)上面圖片框里顯示的98,那只是一張參考圖,在實際查找目標(biāo)的時候不會起到任何作用。也不必糾結(jié)title和url這兩條特征,因為前文已經(jīng)提到,這兩條特征也不會參與到查找目標(biāo)的過程中。
修改完成之后,再次運行這個流程塊,看看是否能正確獲取其他商品的月銷量。如下圖:

奇怪的事情發(fā)生了,之前的異常確實沒有出現(xiàn),并且獲取到了內(nèi)容。但是并不是我們想要的"77",而是"月銷量"幾個字,這是怎么回事呢?
我們觀察一下頁面上的內(nèi)容,發(fā)現(xiàn)修改"aaname"之后,雖然不會發(fā)生“漏選”,但由于文字“月銷量”的特征和“77”完全一致,造成了“錯選”。仔細(xì)查看即可發(fā)現(xiàn),"月銷量"文字和"77"的tagName、attrMap等特征完全一樣,好比是一個戶口本里的同一家人,已經(jīng)無法區(qū)分了。怎么辦呢?可以使用"index"特征來定位他們的不同。上文提到,UiBot的index是從數(shù)字1開始的,當(dāng)index沒有填寫或取0時,則匹配第一個。從頁面上看,"月銷量"這個元素在銷量數(shù)字的前面,如果它是第一個,那么銷量數(shù)字就應(yīng)該是第二個,因此,我們猜測,當(dāng)?shù)?code>index取2的時候,就可以找到銷量數(shù)字了。不妨填上試一下。

現(xiàn)在驗證一下。在UiBot Creator工具欄上,點擊“運行”按鈕,直接運行當(dāng)前的流程塊??梢钥吹剑谄渌唐返捻撁嫔?,也可以正確的拿到了其月銷量數(shù)據(jù)了。
以上范例是對特征的一些簡單總結(jié),在實際操作過程中,我們可以根據(jù)上面的規(guī)律,對需要定位的目標(biāo)進(jìn)行相應(yīng)的修改嘗試。因為操作的目標(biāo)可能千變?nèi)f化,這方面并沒有特定的規(guī)則,只能多多嘗試,積累經(jīng)驗。希望以上內(nèi)容可以為您的實際操作中提供一些參考,幫助您順利的找到操作的目標(biāo)。
返回目錄
注: 上述內(nèi)容經(jīng) UiBot 官方 授權(quán)發(fā)布,版權(quán)歸 UiBot 官方所有,如需轉(zhuǎn)載請先聯(lián)系。
更多 RPA 相關(guān)的資訊,請關(guān)注公眾號:流程自動化機器人教程
由于簡書禁止直接在文章中插入公眾號二維碼,請點擊 這里 了解添加該公眾號的細(xì)節(jié)。