第一篇屬基礎必修課 ! 這與我們將來能否輕鬆寫出一個GDL 有極大的關係,請務必看懂喔~

要寫出一個GDL,無非就是要懂得如何代指令與如何去安排整個流程~

所以此篇教學的重點有兩個方向:

1.網頁的基本架構介紹: 目的在教大家對網頁的形成有基本的了解,將來才有辦法去照著其架構來寫出對應的指令~

2.GDL的流程安排: 指令人人會代,但GDL 跑不跑的順就會差粉多!! 唯有完善的安排才能免去不必要的錯誤~


基本上一份HTML文件會由三個部份所構成~

1.描述HTML版本的資訊(可省略不寫 )

2.以<HEAD></HEAD> 來宣告整個HTML文件的前言

3.HTML文件的本文,可由BODY元素或FRAMESET元素來組成

<HTML>
     <HEAD>
           <TITLE>我會出現在視窗的標題欄</TITLE>
     </HEAD>
     <BODY>
       我也不願意寫教學呀,不過我不寫誰來寫呢 ~_~
     </BODY>
</HTML>

上面是整個架構,而我們的需求是位於 <BODY></BODY> 間的內文~ ( FRAMESET 的說明請參考附錄一的最後一小節"框架" )

在BODY內可放粉多東西,但我們只要一個就好了,即<FORM></FORM>內的東西~

 

而表單(FORM)裏共可宣告七個控制項,其中 INPUT、SELECT、TEXTAREA 這三個才是重點,其它的幾乎用不到,別鳥它~

接著在INPUT 控制項內,又可宣告十種屬性,這十個我們幾乎都會用到,粉重要喔~

下面的網頁裏,我把各種屬性都標了出來,希望大家可以熟悉它的構成模樣。以後一看到網頁就可以馬上判斷它是屬於哪種物件~

 

好! 知道架構後,就可以開始來找相對應的指令了~

比如我想要在 Text物件 那格填上 "我愛小美",那我應該用哪個指令呢?  【03-網頁控制類】

SetFieldValue:欄位名稱=值                           對某一欄位填入值(File欄位除外)。對於多行式(textarea)的欄位填入,則可利用 <Crlf> 來作為換行字符 

指令的說明粉白話,一看就知道只要能找到 Text物件 這格的欄位名稱就一切搞定了~!

所以我們就來翻下一下原始檔,發現如下~

Text物件:<INPUT TYPE="TEXT" NAME=TextTest1 size="20"></BR>  

所以TextTest1 就是我們要的欄位名,即  SetFieldValue:TextTest1=我愛小美   ,就可以填上囉~

至於其它的地方,也都以此類推即可~

 

而NT 為了使USER 更容易去取得欄位資訊,所以 提供了一個DEBUG的功能! 專門用來對網頁內容作分析的。

且特別針對INPUT 控制項的各種屬性,加了一個自動生成指令的功能~

使用方式粉容易,下圖是YG的申請頁面,我們可以看到,這裏只用到 INPUT 與 SELECT ,而 INPUT佔了大多數,有 TEXT、CHECKBOX、SUBMIT、BUTTON 四種~

大概了解網頁的構成方式後,那我們就可以來教大家如何利用DEBUG功能來快速取得所有控制項的欄位訊息~

首先,切換到【瀏覽器】,KEY入申請頁連結後,再來就是把那些空格都照你看的懂的意思填上值~

接著切換至【DEBUG】,工作區選 瀏覽區,顯示類別選 INPUT ,再按自動產生填入欄位命令

 

這樣子,所有的欄位資訊是不是一目了然了呢~   帥吧,老皮!

當然,我們也可以選擇其它的控制項,比如 SELECT ~

切換至【DEBUG】,工作區選 瀏覽區,顯示類別選 SELECT !

再來就是把它們全反白後,按右鍵,選  Copy Selected ByName,就可以得到這四個欄位的名字了~ 

 

 

 

前面看的粉想死的人可以放鬆一下了,因為這個部份是在講 邏輯 ,所以不會像前面講網頁結構一樣死板板的~

何謂流程呢? 就是指令執行的順序~ 就像我們手動時一樣,也會有個順序~

當我們手動時,眼睛是盯著視窗的,有任何狀況,都可以馬上處理~

但當我們寫成GDL時,是改由PC 來幫忙處理,所以我們除了要考量到各式各樣的狀況外,更要正確的安排整個執行的過程~  

 

例: 無限鄉民的寒冬送暖活動

這個例子的主要在表達 一個帳號上傳一個檔案~

整個順序是從1~9,但其中3、6、8 的地方,各加了一個 邏輯判斷 ,箭頭的方向就是轉移程序的走向~

程序3:當沒人或沒愛心品時,直接跳到程序9,結束~

程序6:當上傳失敗時,則跳回程序5,再次上傳~

程序8:完成上傳,再跳回程序1,從頭開始~

 

 

我們把上面的例子再應用,變成每位無限鄉民要負責多樣愛心品~  意即 一帳號上傳N個檔案 的例子~

 

整個順序是從1~12,但其中3、5、8、10、11 的地方,各加了一個 邏輯判斷 ,箭頭的方向就是轉移程序的走向~

程序3:當沒人時,直接跳到程序12,結束~

程序5:當沒人時,直接跳到程序12,結束~

程序8:當上傳失敗時,則跳回程序7,再次上傳~

程序10:判斷個人負責的愛心品是否已全部上傳完了,若還有則跳品程序4~

程序11:個人負責的愛心品已全部上傳完了,再跳回程序1,換下一個鄉民~

 

若我把上面的例子(無限鄉民寒冬送暖活動partII)來套對應的NT指令,就會變成下面的~~

  1. Label:無限論壇                                         【05-程序控制類】
  2. GetACcount()                                             【00-清單處理類】
  3. IFNo:活動結束   
  4. Label:領愛心品區                     
  5. GetFile()                                                      【00-清單處理類】
  6. IFNo:活動結束                           
  7. go:上傳頁面                                               【03-網頁控制類】
  8. 上傳檔案
  9. 判斷是否上傳成功,否則重傳
  10. 上傳成功,取得分享連結                        【03-網頁控制類】
  11. FileBreakLoop:領愛心品區                        【00-清單處理類】
  12. GoLabel:無限論壇
  13. Label:活動結束
  14. EXIT()

 

 

對流程安排有了體認後,接著要考慮的就是程序執行的穩定度~

何謂穩定度呢??   即每個執行的步驟是否都能精準的完成

倘若我們在某些步驟上出了差錯,那就算整個程序的安排是妥善的,也會因為連帶效應而導致錯誤~

以  無限鄉民的寒冬送暖活動 為例:

倘若在程序6時, 程式並未等到檔案上傳完畢時才下判斷,那結果就會產生誤判,而將程序再轉至程序5~

或

倘若在程序4時,程式未等到災區頁面已完全開啟就下判斷,那就會產生誤判而反覆執行程序4~

為此,NT在設計指令時,只能以大部份適用作為前提! 剩下不足的地方只有靠USER來自行調整~

比如 XX相本的上傳,在按下上傳鈕後,會先跳出一個進度圖,再跑表單送出~

對手動而言,沒有任何問題。但對下指令而言,那個跳出的進度圖,就會是個致命的關鍵~

以WINXP 的系統而言,當進度圖跳出後,NT的 ClickButton: 指令就會判斷完成動作了!! ( 但又不是每次都會判定完成   )

所以接著程序就會往下一行走,若下面接的是判斷上傳是否成功的偵錯,那結果就是反覆執行這個迴圈~ (同樣的寫法對WIN2K 來說,就沒有誤判的問題!!)

再來,當程序一直不斷反覆執行時,假設每個程序接替時間是粉快速的,到了程式無法負荷時,就會發生失控的情形,即有些人會遇到的 "程序爆衝" !!

程序爆衝後,幸運的話,就是停在那裏動也不動 ! 但粉多時候是程式會整個不見~

關於這點,程式可以更改的已於1.5版中修正過,即把每個程序接替時間加入0.5秒 的緩衝,可避免程式整個跳掉的情形~

剩下的部份就要USER從既有的指令來補足之~

例如,同樣的是XX相本的上傳~

原始設計

改良方式一

改良方式二

Label:RE-up
go:上傳頁
FindWebText:上傳相片到
IfNo:RE-up
SetFieldValue:MAX_FILE_SIZE=60000000
SetFileValue:userfile[]=***File***
SetFieldValue:title[]=***FileName***
RandomizeText:***Variable5***,anxanxanx
SetFieldValue:tag=***Variable5***
Select:thumbtype,2
ClickButton:開始上傳
FindWebText:資料處理中
IfNo:RE-up
Label:RE-up
go:上傳頁
FindWebText:上傳相片到
IfNo:RE-up
SetFieldValue:MAX_FILE_SIZE=60000000
SetFileValue:userfile[]=***File***
SetFieldValue:title[]=***FileName***
RandomizeText:***Variable5***,anxanxanx
SetFieldValue:tag=***Variable5***
Select:thumbtype,2
RunScript:document.form1.submit();
FindWebText:資料處理中
IfNo:RE-up
Label:RE-up
go:上傳頁
FindWebText:上傳相片到
IfNo:RE-up
SetFieldValue:MAX_FILE_SIZE=60000000
SetFileValue:userfile[]=***File***
SetFieldValue:title[]=***FileName***
RandomizeText:***Variable5***,anxanxanx
SetFieldValue:tag=***Variable5***
Select:thumbtype,2
ClickButton:開始上傳
Label:wait
WaitWebText:上傳進度條產生後會出現的字眼,3,wait
FindWebText:資料處理中
IfNo:RE-up
以上這種寫法,對xp的人來說,常會有上傳未完成就判定失敗而重覆上傳的情況發生~ 送出方式由表單直接送出,沒有再去"按"上傳鈕,自然也不會觸動網頁上其它的元件。所以那個上傳的進度條不會秀出來。自然也不會有誤判的問題。 在按下上傳鈕後,再多加一個偵錯!! 以進度條產生時會出現的字眼來判斷。隨後才是檔案上傳是否完成的偵錯。如此一來也就不會有偷跑的情形~

 

關於精確控制程序穩定度常會用到的指令有下面幾個,一定要善加利用!!

FindWebText:文字串(可代變數)                                      尋找Web 頁面上的文字(含欄位值),其傳回內容可由 IFYes 或 IfNo 來加以判定
IFYes/IfNo:標記名稱                                                         若傳回真/傳回假 則此條件成立,並前往標記處

 FindHtmlText:欲尋找的字串(含html碼)                          尋找Web 頁面原始檔裏的字串,其傳回內容可由 IFYes 或 IfNo 來加以判定
 IFYes/IfNo:標記名稱                                                        若傳回真/傳回假 則此條件成立,並前往標記處

Wait:部分連結(連結文字),秒數,標記                              在秒數內沒看到該連結,就往標記處移

WaitWebText:網頁中某文字串,秒數,標記                      在秒數內沒看到設定之字串,就往標記處移

WaitHtmlText:網頁中某原始碼字串,秒數,標記              在秒數內沒看到設定之字串,就往標記處移

 

Free Web Hosting