2012-02-28 51 views
2

我正在尋找一種方式來關閉Javascript彈出/消息框(即不是新的IE窗口,但是一個腳本警報()),加載網頁時加載。關閉JavaScript警報使用VBA自動化

我目前有代碼將數據加載到搜索表單中,運行搜索,從結果中檢索所需信息,退出搜索,然後繼續執行列表中的下一項。在某些情況下,搜索結果中缺少一些重要信息。發生這種情況時,頁面上的JavaScript會在頁面加載時彈出消息,讓用戶知道信息丟失。通過自動化,代碼在繼續之前暫停(等待)該框清除,並且用戶在此之前必須點擊OK按鈕。 (我無法直接更改頁面的源腳本,因爲這超出了我在工作中的責任範圍,另外,保留此功能對於一般用途來說更爲重要;它只能用於有利於我創建這個小使用功能。)

儘管我無法更改源腳本,但我發現example關於如何通過更改加載的腳本來防止顯示彈出/警報。然而,它涉及到一個已經加載的頁面,並不真正爲我工作(據我所知)。

IE.Document.getElementById("clearRelItems").removeAttribute "onClick" 
IE.Document.getElementById("clearRelItems").setAttribute "onClick", "return true;" 

是否有可能使用這種方法來做出改變前的頁面完全加載?即,這可以用來以某種方式在頁面加載時繞過/繞過函數調用?

我知道關於sendkeys,但我寧願儘可能避免這個選項(如果沒有其他選擇,我可能會最終使用此選項)。該功能旨在由用戶發起,然後在後臺運行,因爲它需要一些時間才能完成。

我已經考慮過抓住@Kyle建議的XML,但我不相信我足夠熟練地使這種方法起作用。

我還能如何解決警報?有沒有辦法實際激活警報上的確定按鈕?可以通過其他方式繞過警告/加載頁面嗎?

+0

這是一個Javascript的通知();消息框?或者一個html元素? – Cilvic 2012-02-28 20:47:42

+0

這是一個alert()框。 – Gaffi 2012-02-28 20:48:38

回答

2

一個解決方案可以識別您的腳本何時卡住,然後發送按鍵「enter」關閉彈出窗口。

+0

我知道sendkeys,但是這是由用戶發起的,然後在後臺運行,因爲它需要一些時間才能完成。如果沒有其他選擇,我可能會最終使用此選項。(將此信息添加到原始問題) – Gaffi 2012-02-28 20:51:08

+0

我仍然不願意,但是我將不得不使用此選項。謝謝! – Gaffi 2012-03-02 01:18:46

+0

SendKeys無法在我的情況下成功關閉JavaScript confirm()彈出窗口。在SendKeys之前添加Application.Wait也不起作用。任何人都有這個問題? – 10basetom 2012-10-23 10:26:56

1

你有沒有看過使用MS XML類直接發佈數據和解析結果?這比IE自動化要快得多,雖然並不總是可行的

編輯:不是,我們只是使用類來處理請求和響應,我們實際上並沒有使用XML,我把它放在一起爲某人前陣子給你一個想法:

Sub GetDataXML() 

Dim strPostText As String, strResponse As String 
Dim Pressure As Double, Temperature As Double 
Dim XMLrequest As Object 

Pressure = CDbl(InputBox("Enter the Pressure")) 
Temperature = CDbl(InputBox("Enter the Temperature")) 

strPostText = "lang=english&calc=standard&druck=" & Pressure & "&druckunit=1&temperatur=" & Temperature & "&tempunit=1&Submit=Calculate" 

Set XMLrequest = CreateObject("MSXML2.XMLHTTP") 

With XMLrequest 
    .Open "POST", "http://www.peacesoftware.de/einigewerte/calc_co2.php5", False 
    .setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
    .send (strPostText) 
    Do: DoEvents: Loop Until .readyState = 4 
    strResponse = .responseText 
    .abort 
End With 

Debug.Print strResponse 

End Sub 

,如果你在Excel中使用查詢表作爲該處理數據的任何解析更容易。

以上幫助你嗎?

+0

我已經成功地獲得了你的榜樣,@凱爾。然而,還有一些其他的東西進入POST命令,我錯過了(這是基於我完全缺乏知識的假設)。我無法確定通過了哪些變量,也無法修補我的未知數,因爲每當我在原始頁面範圍外進行操作時,腳本會將我指向登錄頁面。 Debug.Print輸出我習慣的標準登錄屏幕的代碼。我如何能夠查看這些變量?每個INPUT/OPTION標籤是否有一個? (如果是這樣,有相當多的工作。) – Gaffi 2012-03-01 19:46:06

+0

這種方法並不總是可能的。獲取POST變量的最簡單方法是使用開發工具中的瀏覽器,您使用哪種瀏覽器? – SWa 2012-03-02 09:08:12

+0

這是爲了工作,我唯一的選擇是IE 7. – Gaffi 2012-03-02 11:08:54