2011-01-12 85 views
1

我從Excel VBA這樣,內即自動自動化的InternetExplorer應對網站消息框的部分用VBA

Set ie = CreateObject("InternetExplorer.Application") 

With ie 
    .navigate "http://www.statspass.com/login.asp" 
    Do While .Busy: DoEvents: Loop 
    Do While .readyState <> 4: DoEvents: Loop 

    With .document.forms(0) 
     .txtUsername.Value = "username" 
     .txtPassword.Value = "*****" 
     .submit 
    End With 

代碼後來,我瀏覽到一個不同的URL,並得到一些數據。這一切都很好,昨天。今天,當它進入「提交」行時,網站會顯示一個消息框,顯示「正在註銷另一個會話」。我設置ie.Visible = True,並通過代碼來解決這個問題。如書面所示,消息框未顯示。當顯示消息框時,它位於頁面上,並且.Busy(上面未顯示)始終爲真,因此代碼剛好位於循環中。

當ie.Visible = False時,沒有消息框(正如我所期望的),代碼沒有保留,但在下一次Navigate方法調用時,它最終回到登錄頁面(因爲它是沒有正確登錄),並且在嘗試訪問某些登錄屏幕上不存在的表時出現錯誤。

我需要登錄到本網站,導航到某個頁面,並從表中獲取信息。根據我的代碼現在的位置,我想弄清楚如何以及何時存在,如何對該消息框表示正確。但是如果我需要退後一步並考慮其他方法,我並不反對。

不太重要,但仍然困擾着我,這就是爲什麼此代碼昨天工作?我測試了它,並將它發送給報告這些錯誤的客戶,今天我收到了錯誤。

回答

2

當我遇到類似的情況時,我可以通過執行JavaScript來代替confirm函數,只需返回true就可以解決問題,然後執行將調用警報的操作。

oldConfirm = window.confirm; 
window.confirm = function (msg) { return true; }; 

如果你想要把一切恢復原樣後,您就可以執行下列操作...

window.confirm = oldConfirm; 
oldConfirm = undefined; 

至於爲什麼這應該是必要的,當你的代碼工作不前,恐怕我不知道。儘管我總是需要Rails/Cucumber/Selenium/Firefox。