NT 程式介紹:描述主程式的各項功能用法
程式輪廓介紹
程式最上面的標題 列會顯示目前載入的GDL檔~ (程式開啟時預載是上次之GDL檔)
接著的大窗 口是GDL執行時的WEB控制窗口,在GDL未編碼的情況下可看到窗口內容(按F11會切換至Msg窗口)
再來會有個檢示原始檔的鈕 ,按下後會列出執行窗口之原始碼。
延遲速度:指執行程序的間隔時間,以豪秒為單位!! 9 個下拉等級表示延遲0.1秒至0.9秒!! 建議以延遲300毫秒(0.3秒)為基準,再視執行情況自行調整之~
欲執行次數 與 已執行次數,當程序走到 EXIT() 時,欲執行次數會減1、已執行次數則加1。常用於計數需求 (可搭配 ***RunCount*** 變數來取得已執行次數之當下值 )
備用欄:預留性設計,可搭配 * **Additional*** 變數來取得當下之值,並無特定運用方式,由使用者自由發揮~
接著點選各功能性標籤後,會有其清單內容與相關處理功能鈕~
最底下那列則是NT程式執行時的相關訊息。
Wait:秒數 | 顯示由 Wait、WaitHtmlText、WaitWebText 這三個指令所下之 還需等待時間 |
ActWeb:? | ?=1 時表執行窗之焦點落於母視窗,2時則為子視窗 |
DeTime:10 | 指當網頁已讀取完畢10秒內無任動作時,則程序自動往下走 |
Frames:? | 指目前執行框的網頁裏,框架的總數目 |
帳、檔、備、郵 | 指各清單中所剩之資料筆數 |
Sleep:秒數 | 顯示由 sleep(?)函數所下之還需等待時間 |
X、Y 值 | 不限於程式窗口之全域性 滑鼠位置偵測,其值可用於 MouseMove 命令 所需參數~ |
命令標籤
當切換至命令標籤後,下方那排快捷工具列~ 分別可用 F1到F10來執行。( F11 為切換至Msg 視窗 、F12 為編碼工具框)
簡單易懂的我就不多作說明,你自已動手試試就知,這裏只挑重點處說明就好~
(F2)
執行已載入之GDL,程序會從第一行開始跑起 。若過程中想停止,可按下
(F3)
NT提供可編輯已載入GDL之功能。
於編輯窗中左邊是命令列表,右邊是GDL,下面則是你選取的指令使用說明~
你也可以將GDL中的部份關鍵字反白後,再按下F2,程式會自動搜尋相關的指令說明~
(F4)
執行指定的單獨那行程序 (方便測試用途)
在命令清單中按下右鍵就會出現。Refresh Command 表示重新讀取GDL。Start Run In Point 表示從指定的那行程序起開始執行GDL
各清單標籤
在實務運用上不必跼限於清單名稱的定義,只要其支援的資料格式符合你的需求,就可以拿來用喔~
帳號清單主要是用來存放以 帳、密型態組成的資料!! 上面四種格式 的資料,存入帳號清單時,程式都會自動過濾成 ID:PW
檔案清單當然就是用來存放上傳檔案的地方了 !! 而斷行符主要是作為是否跳出迴圈的判斷依據,詳細用法請參考實戰教學。
(支援直接以檔案總管拖曳方式加入檔案)
備註清單的資料格式不同於帳號清單的帳密型態,而是以一列為單位,程式並不會作任何過濾資料的動作~
郵件清單的資料也是以一列為單位,程式並不會將資料過濾!!
但經由GetMail()宣告後所產生之屬性變數。其中***MailUrl*** 會自動將資料過濾成 id@mail_url 的型態。
(支援過濾的資料格式為 FTP://ID:PW@MAIL_URL、ID:PW@MAIL_URL 兩種)
輸出清單顧名思義就是用來存放我們經由WEB處理後所得到的資訊~ 呀那幾個功能鈕,自已試試應該粉容易上手的~
暫存清單與其它清單的定位不同!! 它並無額外的功能處理鈕,只能靠指令來更動其內容。屬臨時性的處理區域,當NT關閉後,此清單內的資料也會全部消除~
瀏覽器&DEBUG標籤
上圖中右上角的檢示原始檔鈕,則是針對瀏覽器的窗口動作。
再切換至DEBUG標籤來看~
要分析網頁前,先選擇工作區!! 瀏覽區是指瀏覽器的窗口、執行區是指執行窗~
接著選類別,裏面有網頁常用之控制項可過濾,方便USER可快速分析~
若想取得DEBUG清單中之資料,則在其內容上按右鍵,即有相關處理選項可供使用~
排程標籤
新增排程的方式粉容易,就選 欲執行的時間與欲執行的GDL、與執行次數(程序走到EXIT() 算一次)即可。(備註說明是方便自已辨視)
呀記得排程新增後,要按一下啟動排程,程式才會開始進入排程功能喔~
函數標籤
你寫GDL時,是否常會建立一些重覆性的處理呢? 而這些處理卻又非是NT本身有提供指令或函數可支援的!
為此NT提供一個可讓使用者彈性自訂函數的功能~ ! 方便使用者可以建立自定的函數~
只要載入函數後,在寫GDL時就可以直接 call:函數名 來調用,可以省下許多重覆性的CODE囉~
所謂自定函數即是在一個*.fun 檔裏,宣告自定之 Script(允許建立多段) ,其輸出結果會存於 ***ScriptOut*** 中,供程式任意調用。
每段函數是以 NetTools Function:函數名至 End NetTools Function 為止。
函數內容撰寫方式同一般 Script 之格式,可多行撰寫與加備註,但切記敘述需嚴謹,宣告要明確(VBSCRIPT 或 JAVASCRIPT 要定義清楚)。
//——— 自定函數1
NetTools Function:函數名稱一
<script language="javascript">
…
</script>
End NetTools Function
//——— 自定函數2
NetTools Function:函數名稱二
<script language="javascript">
…
</script>
End NetTools Function
函數處理是在第三窗 口作動作,所以並無法與執行窗之網頁元件作關聯!! 但可搭配既有之變數來應用,如 ***Variable?***、***FileName*** 等 !
附上一個測試GDL,打開NT後,先切換至函數標籤把下面的data.fun 載入,再執行GDL即可~
附件:data.fun(隨機產生韓文姓名、韓文身份証碼、香港身份証碼)
go:about:blank
AddWebHtml:<textarea name=test1 rows="1" cols="10"></textarea><textarea name=test2 rows="1" cols="20"></textarea><textarea name=test3 rows="1" cols="15"></textarea>
//—隨機韓文姓名
call:KR_Name(rad)
SetFieldValue:test1=***ScriptOut***
//—隨機韓文身份証
call:KR_ID(rad)
SetDataValue:700218,***Variable88***
SetFieldValue:test2=***Variable88***-***ScriptOut***
//—-隨機香港身份証
call:HK_ID(rad)
SetFieldValue:test3=***ScriptOut***
EXIT()
下載&NDLM標籤
StartDownload() 命令啟動後,程式會自動切換至 【下載標籤】
其清單中則會顯示檔案下載時的相關訊息~
若該GDL為已編碼的狀況下,則在下載清單中會將下載連結給HIDE掉~
當檔案下載完成時,在輸出清單中會有相關記錄~
NetDownload() 命令啟動後,程式會自動切換至【NDLM標籤】
其清單中則會顯示檔案下載時的相關訊息~ (下載存入路徑請於【下載標籤】中指定 )
以此方式下載檔案完成時,該線程會自NDLM清單中消失 ~
若想手動中止該線程的話,也可在其上面點一下右鍵,選關閉下載線程即可~
編碼
NT 的精神是指令明碼化,希望每個人都能夠付出一點心力來為大家服務 !! 若你願意提供未編碼的GDL給大家參考、使用,那自然是最好~
但畢竟WEB 控制的範圍太廣大,針對分享而言或許還有團隊沒預期到的漏洞存在著!!
所以若你有安全疑慮考量時,適當的利用編碼功能來保護自已也是無可厚非的喔!!
在程式中按下 F12 後,編碼的工具框就會出現~
基本編碼的方式就是直接把原始GDL載入,再按產生編碼即可~
編過碼的GDL 就與沒編的GDL一樣,執行時只差在執行窗看不看的到東西而已!!
( 但若你編碼時勾選了 【強化編碼】,則GDL在執行的過程中只有 命令、下載、NDLM 三個 頁籤可切換查看,其餘的皆會鎖死無法查閱喔!! )
編碼時,程式會自動過濾掉 空白行 與 註解行 與 Shutdown: 指令(避免影響到USER本機正常操作)
編碼只支援英數符字串, 即非標準ASCII碼的部份都不能編,例如 中文、日本、阿米巴文等都不能行喔!!
假設我的GDL中必需要用到中文字該怎麼辦呢?? 那就改加掛MSG檔來輔助即可~
所謂MSG 檔只是一個純文字檔!! 其名稱若與欲加掛之GDL名稱一樣時,則當GDL載入後,MSG 檔便會隨之掛上~
再來便可利用 GetMsg 指令來取得MSG檔內之中文字串囉~
例如有如下一個GDL ,若我將它編碼的話,因為裏面含有中文字,所以編碼的結果會是錯誤的~!
Org_TEST.GDL
Prompt:請問誰是世界上最漂亮的女生??
IF:"***PromptData***"="聰明漂亮美"
IFYes:OK
RunScriptNext:alert(‘找死呀!! 不要命了…’ +’\n\n’+ ‘***PromptData*** 算哪根蔥呀!!’)
over()
Label:OK
over()
所以我可以把 【Org_TEST.GDL】 改成 【TEST.GDL 搭配TEST.MSG】 來執行~
TEST.GDL
GetMsg:1,***Variable10***
GetMsg:2,***Variable32***
GetMsg:3,***Variable42***
GetMsg:4,***Variable56***
Prompt:***Variable10***
IF:"***PromptData***"="’***Variable32***"
IFYes:OK
RunScriptNext:alert(‘***Variable42***’ +’\n\n’+ ‘***PromptData*** ***Variable56***’)
over()
Label:OK
over()
TEST.MSG
請問誰是世界上最漂亮的女生??
聰明漂亮美
找死呀!! 不要命了…
算哪根蔥呀!!
如此一來,在TEST.GDL中已沒有中文字了,那我就可以把TEST.GDL 拿去編碼後,再存成TEST.GDL即可 !!
這個編碼模式的意思是說:我想讓某些帳密資料,只能在我指定的GDL中才能執行!!
比如說我今天弄了一個JP-YM的分享GDL,當然我會把分享帳密編碼後再給人~ ( 癈話,不編碼是請人家砍你檔案嗎 )
假設我沒有把這些分享帳號綁定在我指定的GDL,也就是 YM-JP 的分享GDL中,我只用了普通的編碼模式~
若有個粉機車的人,把我分享的這些帳密丟進去YM-JP 的回收GDL跑,那就挫賽了~ XD
所以一定要有個觀念:牽涉到分享帳密的編碼,一定要選擇綁定GDL與加強編碼喔!!
了解此選項的意義後,就可以來看帳密綁定GDL的編碼流程~
一樣在NT中按F12 開啟編碼工具,此時先勾選 【帳號與密碼對GDL編碼認證】 選項,編碼工具便會多出第三個框~
如上圖所示:
第一個框是放入欲編碼之帳密資料
多出的第三個框則是載入此次帳號資料欲綁定之GDL ( 此GDL可是明碼或已編碼,但若勾選了強化編碼則必需用已編碼的GDL才行喔 )
接著就可以按【產生編碼】,然後中間那個大框就會產生此次帳密資料的編碼了~
也就是說,最後得到的這組編碼(帳密資料)只能用在由第三個框載入的那個GDL中執行~
假設你把這組綁定GDL的帳密編碼丟到別的GDL中來執行,就會看到如下的畫面~ XD
當你按下確定後,NT 將自動關閉!!
最後再來比較一下帳密搭配GDL在不同編碼模式下,NT執行時的差異!!
GDL 已編碼(有強化編碼) | GDL為明碼 | GDL 已編碼(無強化編碼) | |
帳密為編碼型態 (有強化編碼、無綁定GDL) |
NT正常執行 執行窗為隱藏狀態 頁籤只有命令、下載、NDLM可用 |
NT正常執行 執行窗正常顯示 功能頁籤無鎖定限制 |
NT正常執行 執行窗為隱藏隱藏狀態 功能頁籤無鎖定限制 |
帳密為編碼型態 (無強化編碼、無綁定GDL) |
NT正常執行 執行窗為隱藏狀態 頁籤只有命令、下載、NDLM可用 |
NT正常執行 執行窗正常顯示 功能頁籤無鎖定限制 |
NT正常執行 執行窗為隱藏隱藏狀態 功能頁籤無鎖定限制 |
帳密為明碼狀況 | NT正常執行 執行窗為隱藏狀態 頁籤只有命令、下載、NDLM可用 |
NT正常執行 執行窗正常顯示 功能頁籤無鎖定限制 |
NT正常執行 執行窗為隱藏隱藏狀態 功能頁籤無鎖定限制 |
帳密為編碼型態 (有強化編碼、有綁定GDL) |
NT正常執行 執行窗為隱藏狀態 頁籤只有命令、下載、NDLM可用 |
程式無法執行 | NT正常執行 執行窗為隱藏隱藏狀態 功能頁籤無鎖定限制 |
帳密為編碼型態 (無強化編碼、有綁定GDL) |
NT正常執行 執行窗為隱藏狀態 頁籤只有命令、下載、NDLM可用 |
NT正常執行 執行窗正常顯示 功能頁籤無鎖定限制 |
NT正常執行 執行窗為隱藏隱藏狀態 功能頁籤無鎖定限制 |
由上表可歸納出三個結論:
功能頁籤是否鎖定是取決於 GDL 在編碼時是否有選擇【強化編碼】 !!
執行窗是否隱藏是取決於 GDL 是否有編碼 !!
帳密欲綁定GDL 來編碼,若有指定強化編碼,則該GDL 需是已編碼的!!
MSG窗口
這窗口的設計理念是想提供使用者可以創造屬於自已特色的GDL!!
藉由MSG 窗口,程式執行的過程將不再是死板的看著執行窗動作!! 取而代之的是你想傳達給使用者的訊息~
當MSG檔伴隨著同名稱之GDL被載入時,訊息來源列表裏便會列出MSG檔裏的資料~
TEST.GDL
GetMsg:1,***Variable10***
GetMsg:2,***Variable32***
GetMsg:3,***Variable42***
GetMsg:4,***Variable56***
Prompt:***Variable10***
IF:"***PromptData***"="’***Variable32***"
IFYes:OK
RunScriptNext:alert(‘***Variable42***’ +’\n\n’+ ‘***PromptData*** ***Variable56***’)
over()
Label:OK
over()
TEST.MSG
請問誰是世界上最漂亮的女生??
聰明漂亮美
找死呀!! 不要命了…
算哪根蔥呀!!
輸出列表 的設計理念是想提供使用者一個可傳達即時訊息的窗口!! 只要是當下想表達的東西或不屬事後性的資料彙整,都適用於此窗口!!
相對的,記錄列表 則是用來記錄一些重要、必需的訊息!!也正因如此,它也較輸出列表擁有較多列表處理的指令支援性!!
CopyOutToRecord:符合條件的一部份,第幾個參數(選擇性參數)
MoveOutToRecord:符合條件的一部份,第幾個參數(選擇性參數)
CopyNoteToRecord:符合條件的一部份,第幾個參數(選擇性參數)
MoveNoteToRecord:符合條件的一部份,第幾個參數(選擇性參數)
CopyAccountToRecord:符合條件的一部份
MoveAccountToRecord:符合條件的一部份
CopyFileToRecord:符合條件的一部份
MoveFileToRecord:符合條件的一部份
CopyMailToRecord:符合條件的一部份
MoveMailToRecord:符合條件的一部份
CopyTempToRecord:符合條件的一部份,第幾個參數(選擇性參數)
MoveTempToRecord:符合條件的一部份,第幾個參數(選擇性參數)
OutRecord:
ClearRecord:符合條件的一部份
ClearNotRecord:符合條件的一部份
NT 指令列表:指令依類別細分逐列說明
實戰範例:10個例子學程編排設計
附錄集:額外技巧與常見問答、檔案下載
從GSS 時期我就一直有個心願想要寫一篇完整的語法教學,但因為諸多原因最後還是無疾而終…
這次很榮幸能夠參與NetTools 的開發,所以當慕雲希望我可以寫一份完整教學來推廣時,我就爽快的答應了~
因為個人工作的關係,整份教學的制作過程花了相當長的時間,其間寫寫停停,也曾一度寫到粉厭倦…
不過幸好最後的結局是美好的!! 總算能趕在NT終版推出前完工了~ !!
想寫給大家的東西真的粉多,但奈何能用的時間實在太少,只能盡量以最短的篇幅來傳達我的想法~
雖是如此,但筆者還是衷心的希望藉由這份教學能讓更多人於撰寫GDL中受惠~