分享

網頁自動填表自動登錄自動點擊模擬代碼彙總

 ipilipala 2017-01-01
一、創建簡單的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僅對腳本錯誤對話框起作用,並且不會阻止腳本執行.
wb.noScriptErr = ture

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./")

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網頁

aardio2.jpg
2010-12-1 19:36 上傳
下載附件 (51.3 KB)



二、自動填表、自動登錄(提交)代碼
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./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./3rdServices/50hero")
winform.show(
true)
wb.wait(
"");

//登錄
wb.getEle("username").value="登錄用戶名"
ele = wb.getEle(
"password")
ele.value=
"999999"  

ele.form.action =
'http://secure./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.%2F3rdServices%2F50hero&login_submit=%E7%99%BB%E5%BD%95&username=登錄用戶名&password=999999&x=33&y=15&_REFERER="
    ,0
    ,65001
    )

//自動提交
wb.post("http://secure./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./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./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./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.%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./signin?f=out" ,postData,"" );
whttp.close();
//釋放資源
    

if(str){//如果提交成功則保存到指定文件
    string.save("/post.html",str )
    process.
execute( "/post.html"  )
}
else{//否則輸出錯誤信息
    win.msgbox(errmsg)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章