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中受惠~