一、創建簡單的WEB窗口(winform)
1.1點擊新建WEB窗體即可創建WEB瀏覽器,默認代碼如下:
//創建web窗體
var wb = web.form( winform
,//可輸入_UIFLAG_ 前綴的常量自定義外觀
,//可輸入_DLCTL_ 前綴的常量以控制下載行為
,//"USER AGENT"
);
第二個參數可以使用一個或多個_UIFLAG_ 前綴的常量自定義外觀,多個常量之間用位或操作符( | ) 連接.
第三個參數可使用_DLCTL_前綴的常量以控制下載行為,多個常量之間用位或操作符( | ) 連接.第四個參數USER AGENT
(新版新添加還沒知道用法請老大指導)
較常用第三個參數,控制下載行為,具體參數可參考幫助文檔
常用有_DLCTL_DOWNLOADONLY | 下載圖片,但不顯示 |
_DLCTL_NO_FRAMEDOWNLOAD | web窗體對包含框架的頁面進行語法分析但不下載任何幀, 同時忽略框架, |
_DLCTL_RESYNCHRONIZE | 忽略緩存中的數據並向服務器請求更新 |
_DLCTL_SILENT | 組件對話框、腳本錯誤對話框靜默模式 |
_DLCTL_NOFRAMES | 禁止框架 |
1.2常用WEB窗體特殊設置1). 禁止所有腳本錯誤對話框,並使腳本繼續運行。 與wb.silent不同,wb.noScriptErr僅對腳本錯誤對話框起作用,並且不會阻止腳本執行.
2.)不顯示網頁JS彈出的【確定】窗口
wb.showMsg=function( 提示信息, 對話框標題 ){
return false;/*返回false則不顯示對話框*/
}
如想顯示【確定】窗口並自動點擊後消失則如下:
wb.showMsg=function(text/*信息*/,caption/*標題*/){
closeDlg_t = function(title) {
import winex;
//查找符合標題的對話框
var hwnd;
do{
hwnd = winex.find("#32770"/*標準對話框類名*/,title )
sleep(100)
}while( !hwnd )
//查找對話框上的第一個按鈕
var hbuttton = winex.findEx(hwnd,1,"Button");
winex.click(hbuttton);
}
thread.create(closeDlg_t,caption/*傳遞參數給線程*/ )
return true; /*返回false則不顯示對話框*/
}
(更多資料詳見幫助WEB窗體事件說明)
1.3 WEB窗體最大化、最小化//點擊最大化,但是這個函數如果發現最大化會還原窗口,並返回一個值表示當前是否最大化
winform.hitmax()
//點擊最小化按鈕
winform.hitmin()
//這個是最大化,並且顯示,多了一個顯示的步驟
winform.show(0x3/*_SW_MAXIMIZE*/)
//這個是最小化,並顯示
winform.show(0x6/*_SW_MINIMIZE*/)
1.4禁止點擊鏈接在新窗口打開A
//在wb.wait()後 添加下面代碼,在所屬的窗口禁止彈出
for(k,ele in wb.eachLinks()){
ele.target = "_self"
}
B
寫在事件裡,這樣每次打開頁面就自動修改,不需要寫在wb.wait後面了.全局開始禁止彈出窗口wb.DocumentComplete=function( pDisp, url) {
/*當整個文檔完成時觸發,刷新頁面不觸發*/
for(k,ele in wb.eachLinks()){
ele.target = "_self"
}
}
//打開目標網站
wb.go("http://www.ecranesoft.com/")
C
//打開一個網址
wb.go(網址,自定義http請求頭,目標窗口="_self")
1.5在控件顯示WEB窗體web.form是一個類,其構造函數可以在現有窗口對象中插入瀏覽器控件.窗口對象可以是一個win.form對象,也可以是窗體上的控件,例如static控件.
如:在static控件顯示WEB窗體瀏覽//創建web窗體
var wb = web.form( winform.static //這是winform窗體上的一個靜態文本框控件
,0x4/*_UIFLAG_NO3DBORDER*/ | 0x8/*_UIFLAG_SCROLL_NO*/ //禁用邊框,禁用滾動條
,0x10/*_DLCTL_DLIMAGES*/ | 0x40000000/*_DLCTL_SILENT*/ //允許下載圖片,但是禁用組件對話框、腳本錯誤對話框等
,//"USER AGENT"
);
還可添加多控件顯示多個WEB網頁
二、自動填表、自動登錄(提交)代碼2.1 自動填表(有NAME或ID)A 簡單 ,沒框架,只有1個屬性名
/*尋找所屬節點的屬性,然後輸入新的屬性值
當知道屬性ID或NAME時可採用下面語句*/
ele=wb.waitEle("_"//雙引號裡填屬性ID或name)
ele.value = _//修改屬性默認值;
ele.fireEvent("_"//當有事件執行函數時需事件發生器,如onchange onsubit)
ele = wb.getEle( HTML節點的ID名name, 框架名 )
/*調用wb.getEle之前必須調用 wb.wait() 等待網頁下載完畢.
而使用 wb.waitEle() 則實現等待該節點下載並返回該節點的功能,而無須等待整個網頁下載完*/
B
多個屬性名相同tele = wb.getEles( HTML節點的name屬性, 框架名 )
tele(1).setAttribute("屬性名字", "修改第一個節點屬性值")
該函數返回網頁上所有name屬性相同的同名節點.返回值為一個com數組.注意com數組使用()括號讀取成員而不是使用索引操作符[]
可以通過第二個參數指定框架窗口,該參數可以省略.
2.2 自動登錄或提交表單
ele.form.submit()//自動提交表單
2.3 特殊形式提交(無NAME無ID)
採用wb.eachAll 遍歷方法查找節點,並使用ele.click()模擬點擊
//遍歷所有input節點
for( i,ele in wb.eachAll("input") ){
if( ele.屬性 == "_"//當找到所屬的屬性恆等於一個「點擊鏈接的值」 )
ele.click();//然後點擊
}
遇到特殊形式,採用遍歷查找是最簡單的方法。
更多的自動登錄示例可查看舊論壇的帖子,裡面彙總了各種形式的登錄示範,還有POST登錄方法。
163郵箱登錄問題(carl版主指導163填表及登錄)
登錄問題(帖子有老大指導多種方法自動登錄)aardio 網頁操作專題視頻(lujjh超版製作的經典視頻教程)
2.4 自動點擊網頁超鏈接
也採用遍歷查找超鏈接,然後自動點擊,老大教我們封裝了一個點擊超鏈接函數clickLink()
clickLink = function(title){//給函數一個連接名參數
for(k,ele in wb.eachLinks() ){//遍歷所有超鏈接
if(string.find(ele.innerHTML,title )){//如果發現超鏈接名
ele.click();//自動點擊
break;
}
}
}
//當鏈接名為A,則執行點擊
clickLink("A")
使用wb.doScript執行js腳本提交的方法
import win;
import win.ui;
import win.ui.menu
import win.ole
/*DSG{{*/
var winform = win.form(parent=...; min=1;bottom=249;scroll=1;right=349;text="aardio Form";max=1 )
winform.add( )
/*}}*/
import web.form;
//創建web窗體
var wb = web.form( winform );
//打開目標網站
wb.go("http://secure.verycd.com/3rdServices/50hero")
winform.show(true)
wb.wait("");
//登錄
wb.getEle("username").value="登錄用戶名"
wb.getEle("password").value="999999"
wb.doScript("FormSubmit()")
//進入消息循環
win.loopMessage();
return wb,winform;
使用ele.form.submit提交的方法
import win;
import win.ui;
import win.ui.menu
import win.ole
/*DSG{{*/
var winform = win.form(parent=...; min=1;bottom=249;scroll=1;right=349;text="aardio Form";max=1 )
winform.add( )
/*}}*/
import web.form;
//創建web窗體
var wb = web.form( winform );
//打開目標網站
wb.go("http://secure.verycd.com/3rdServices/50hero")
winform.show(true)
wb.wait("");
//登錄
wb.getEle("username").value="登錄用戶名"
ele = wb.getEle("password")
ele.value="999999"
ele.form.action = 'http://secure.verycd.com/signin?f=out'
ele.form.submit()
//進入消息循環
win.loopMessage();
return wb,winform;
自動post的方法
import win;
import win.ui;
import win.ui.menu
import win.ole
/*DSG{{*/
var winform = win.form(parent=...; min=1;bottom=249;scroll=1;right=349;text="aardio Form";max=1 )
winform.add( )
/*}}*/
import web.form;
//創建web窗體
var wb = web.form( winform );
//構建上傳數據
postData = string.fromto(
"ru=http%3A%2F%2Fsecure.verycd.com%2F3rdServices%2F50hero&login_submit=%E7%99%BB%E5%BD%95&username=登錄用戶名&password=999999&x=33&y=15&_REFERER="
,0
,65001
)
//自動提交
wb.post("http://secure.verycd.com/signin?f=out"
,postData )
//顯示窗口
winform.show(true)
//進入消息循環
win.loopMessage();
return wb,winform;
使用wb.getDoc().Script.函數(至少一個參數) 執行腳本提交
import win;
import win.ui;
import win.ui.menu
import win.ole
/*DSG{{*/
var winform = win.form(parent=...; min=1;bottom=249;scroll=1;right=349;text="aardio Form";max=1 )
winform.add( )
/*}}*/
import web.form;
//創建web窗體
var wb = web.form( winform );
//打開目標網站
wb.go("http://secure.verycd.com/3rdServices/50hero")
winform.show(true)
wb.wait("");
//登錄
wb.getEle("username").value="登錄用戶名"
wb.getEle("password").value="999999"
//這樣直接執行函數有返回值,必須至少傳遞一個參數,隨便寫一個也可以
wb.getDoc().Script.FormSubmit(0)
//進入消息循環
win.loopMessage();
return wb,winform;
用wb.eachAll查找節點,並使用ele.click()模擬點擊提交.import win;
import win.ui;
import win.ui.menu
import win.ole
/*DSG{{*/
var winform = win.form(parent=...; min=1;bottom=249;scroll=1;right=349;text="aardio Form";max=1 )
winform.add( )
/*}}*/
import web.form;
//創建web窗體
var wb = web.form( winform );
//打開目標網站
wb.go("http://secure.verycd.com/3rdServices/50hero")
winform.show(true)
wb.wait("");
//登錄
wb.getEle("username").value="登錄用戶名"
wb.getEle("password").value="999999"
//遍歷所有input節點
for( i,ele in wb.eachAll("input") ){
if( ele.src == "http://game.verycd.com/hero/wp-content/themes/hero_v1/images/dl.gif" )
ele.click();
}
//進入消息循環
win.loopMessage();
return wb,winform;
不用web窗體也可以自動提交
import process;
import inet.whttp
whttp = inet.whttp();
//構建上傳數據
postData = string.fromto(
"ru=http%3A%2F%2Fsecure.verycd.com%2F3rdServices%2F50hero&login_submit=%E7%99%BB%E5%BD%95&username=登錄用戶名&password=999999&x=33&y=15&_REFERER="
,0
,65001
)
str,errmsg = whttp.down("http://secure.verycd.com/signin?f=out" ,postData,"" );
whttp.close();//釋放資源
if(str){//如果提交成功則保存到指定文件
string.save("/post.html",str )
process.execute( "/post.html" )
}
else{//否則輸出錯誤信息
win.msgbox(errmsg)
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。