Board logo

標題: [發問] 自已寫的仿按精功能vba,自動登入網頁作一連串的動作,目前少了判斷載入完成動作 [打印本頁]

作者: 幼稚園飛天豬    時間: 2010-8-11 13:40     標題: 自已寫的仿按精功能vba,自動登入網頁作一連串的動作,目前少了判斷載入完成動作

本帖最後由 幼稚園飛天豬 於 2010-8-11 13:41 編輯

研究了1天24小時沒睡~~
必竟自已懂的不多~
只好上來求助~~
因為某些限制只能用vba來執行~~
於是就寫了類似按精的vba來自動執行一些程序~

這個範例是想用自動登入網頁~登入後想要在用自定鍵盤滑鼠標動作去得到自已想要的資料
目前卡在的地方,就是當鼠標去點完登入後的網頁,卻不知下一個頁面何時加載完~
不知如何加入程式碼來判斷加載完成,然後執行下一個滑鼠標動作
網站部分以yahoo信箱為例
以下是我的vba

'網頁--------此處有辦法判斷登入完成----------------
With CreateObject("InternetExplorer.Application")
.Visible = True
.navigate [網頁網址]
Do Until .Readystate = 4
DoEvents
Loop
.Document.Forms(0).All("username").Value = [網頁帳號] 'All("username").找網頁的原始檔名子
.Document.Forms(0).All("passwd").Value = [網頁密碼]   'All("username").找網頁的原始檔名子
.Document.Forms(0).All(".save").Click   'All("username").找網頁的原始檔名子
End With
'網頁------------------------


登入後,不知登入後的加載何時完成,因為以下將為鼠標動作,鼠標動作後面還有鼠標動作
問題點在於
With CreateObject("InternetExplorer.Application")
.Visible = True
.navigate [網頁網址]
Do Until .Readystate = 4    這段碼我知是等待加載完,但我鼠標動作後面的網頁加載,都為同一視窗,而且也不需新開網頁,我該如何修改讓他判斷加載完成,在接下鼠標動作DoEvents
Loop
.Document.Forms(0).All("username").Value = [網頁帳號] 'All("username").找網頁的原始檔名子
.Document.Forms(0).All("passwd").Value = [網頁密碼]   'All("username").找網頁的原始檔名子
.Document.Forms(0).All(".save").Click   'All("username").找網頁的原始檔名子
End With
Sleep 3000



For r = 3 To [多少指令] + 2
'滑鼠動作-------------------------------------------------
m = Cells(r, 1)
If m = "" Then
AppActivate [程式名子]
GoTo noms
Else
AppActivate [程式名子]
   
    SetCursorPos Cells(r, 2), Cells(r, 3)
    Sleep 200
    '滑鼠動作-判斷左右鍵
    If Cells(r, 1) = "左鍵1" Then
            左鍵1
        ElseIf Cells(r, 1) = "左鍵2" Then
            左鍵2
        ElseIf Cells(r, 1) = "右鍵1" Then
            右鍵1
    End If
    '滑鼠動作-判斷左右鍵
'滑鼠動作-------------------------------------------------
End If
noms: '滑鼠動作為空白跳到這

'鍵盤動作-------------------------------------------------
    x = Cells(r, 6)
    If x = "" Then
    Sleep [暫停]
    GoTo nokey
    Else
        '鍵盤動作次數-------------------------------------------------
        y = Cells(r, 5)
        If y = "" Then
        Sleep 150
        Application.SendKeys Cells(r, 6), True
        Else
        For n = 1 To Cells(r, 5)
        Sleep 150
        Application.SendKeys Cells(r, 6), True
        Next n
        End If
        '鍵盤動作次數
    Sleep [暫停]
    End If
'鍵盤動作-------------------------------------------------
nokey: '鍵盤動作為空白跳到這
Next r
作者: Min    時間: 2010-8-11 20:58

請教一下 什麼是"網頁加載"?
作者: 幼稚園飛天豬    時間: 2010-8-12 06:11

請教一下 什麼是"網頁加載"?
Min 發表於 2010-8-11 20:58


在讀取一個網頁時
不是會圖片什麼有的沒有的在跑,就在ie的底下會有狀態列
會一直跑,跑到變成完成,就是下載完成這個網頁
作者: 幼稚園飛天豬    時間: 2010-8-13 10:47

謝謝 閔 大常常為我解答
昨天我東想西想,終於想出來了

蠻簡單的,但我卻呆到想不到

我在每次我的鍵盤指令下面加一個判斷加載的程序碼,然後在鍵盤那下個判斷,前面非http的字元時不執行判斷。
^^

對了,閔大你應該有研究api吧,想問你一個很怪的問題

我用api驅動了滑鼠,然後用Application.SendKeys 讓我的巨集自動執行一連串的動作

不知有沒有碼,就是讓我在執行一連串的滑鼠和鍵盤命令時,使用者動滑鼠和鍵盤都是失效的,直到我的動作完成才能回復正常
作者: Min    時間: 2010-8-13 22:55

Declare Function EnableWindow Lib "user32" (hwnd As Integer, fEnable As Boolean) As Boolean
Call EnableWindow(hwnd, True) '指定視窗或控制項是否產生作用。(True有作用 / False無作用)
作者: luckyguys227    時間: 2010-8-14 01:54

唉呀~剛註冊都看不到,好可惜。我想學看看阿
作者: 幼稚園飛天豬    時間: 2010-8-14 09:07

Declare Function EnableWindow Lib "user32" (hwnd As Integer, fEnable As Boolean) As Boolean
Call En ...
Min 發表於 2010-8-13 22:55



    不好意思,小弟不才
有點不懂上面的意思
可能是我的說明也有點不清楚~

假設,我現在對[程式A]作動作  AppActivate [程式A]
做了點滑鼠左鍵好幾個動作,鍵盤好幾個動作~簡稱"SUB 自動動作()"大約要20秒~
在這20秒內,我們按鍵盤,動滑鼠都是反應的~一直到我的"SUB 自動動作()"結速後~才可以使用鍵盤和滑鼠~
這樣應該說的比較清楚

那可以大約寫清楚一點的範例~上面真有點看不是很懂~
對於這句有點不懂--> '指定視窗或控制項是否產生作用。(True有作用 / False無作用)
那我是不是要對[程式A]無作用?
那我的"SUB 自動動作()"不就無效了?
作者: Min    時間: 2010-8-14 11:00

唉呀~剛註冊都看不到,好可惜。我想學看看阿
luckyguys227 發表於 2010/8/14 01:54 AM


加緊加入大家的討論
提供您寶貴的意見及分享您的技巧....
很快就溶入麻辣了喔^^"
   


不好意思,小弟不才
有點不懂上面的意思
可能是我的說明也有點不清楚~

假設,我現在對[程式 ...
幼稚園飛天豬 發表於 2010/8/14 09:07 AM

當你程式在動作的時候 才需要把鎖住鍵盤滑鼠阿!
不是整個重頭鎖到尾~

另 題外話~ 我認為sendkey並非好方式! 因該還有更佳的方式達到目的.
作者: 幼稚園飛天豬    時間: 2010-8-14 11:37

Declare Function EnableWindow Lib "user32" (hwnd As Integer, fEnable As Boolean) As Boolean
Call En ...
Min 發表於 2010-8-13 22:55

小弟真的不是很懂
m大,我真的不會加,vba我還算是初學
因為某些需求,需要此功能。可否用我的附件做給我看
或者用一小段碼示範一下@@
   
怎說用sendkey並非好方式~?有其他方向?

不知m大可抽空教導一下^^
作者: Min    時間: 2010-8-14 21:47

呵呵呵~ 飛天兄 您過謙了!
記得上次 我玩這個api 把電腦鎖住好幾次...

我並不請清楚您所要運用的目的為何! 一樓您也只是"範例"
如果是要抓取網頁的資料 那可能要請沙拉油這類的高手來指點 好像是用wmi的方式...
如果你要要抓取application那要看看他是否有output的api可以用...
如果真的要用sendkey的方式 那順序如下

移動滑鼠
點擊滑鼠或鍵盤
call enablewindow 鎖定
等待wab or application
call enablewindow 釋放
.....

大概是這樣...

如果您的case不方便在論壇討論
那看是否op訊息給我 小弟願將所知道的方式與您討論~
作者: 幼稚園飛天豬    時間: 2010-8-14 23:57

呵呵呵~ 飛天兄 您過謙了!
記得上次 我玩這個api 把電腦鎖住好幾次...

我並不請清楚您所要運用的目的為 ...
Min 發表於 2010-8-14 21:47



一時轉不過來,這樣看你的解說就懂了
了解了~^^
我有運用到wep,也有運用到 特定程序上面~
我的目的就是在執行時,必別人亂動到一些指令~

程序為私人程序,所以沒po上來~^^
很謝謝你的回答。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)