簡體   English   中英

Excel Internet Explorer自動化導致IE環境崩潰

[英]Excel Internet Explorer Automation Causes IE Environment to Crash

我已經成功地使VBA Excel宏自動化,以遍歷循環並命中一系列URL來觸發服務器端腳本-只需完成以下操作即可:

myIE.Navigate ("http://someURL.php?VARIABLE=" & var_string)

遍歷循環時在循環內分配var_string位置。 在此之前,我已經使用以下方法清除了緩存,Cookie和歷史記錄:

Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess #

我嘗試了許多#,包括8,2、16等,以查看其中的任何一個是否有效果(以及#的組合)。

我遇到的問題是,盡管整個腳本SOMETIMES都能正常工作,但如果我第二次運行它,即使該域/ URL完全可用並且可以正常運行,我導航到該URL的行也無法調用該URL。 我手動在IE窗口中鍵入的任何其他URL都可以正常工作-只是我在循環內調用的URL不起作用。 IE暫時將我鎖定在該域之外。 如果我在上次運行該腳本后幾小時返回該腳本,則通常可以正常運行。

同樣,該域可以正常工作並且腳本很好-我一直在另一台計算機上對其進行驗證。

就好像我在環境中設置某些東西並在VBA中破壞Internet Explorer一樣,盡管腳本非常簡單。

我已經為myIE對象嘗試過CreateObject()GetObject以及InternetExplorerMedium

如果您需要的只是“觸摸”該URL的副作用,那么您也可以使用XMLHTTP對象。 在VBA中,轉到菜單工具,然后選擇引用,然后選擇Microsoft XML v6.0。 然后:

Dim Request As New XMLHTTP
Request.open "GET", Url & "?VARIABLE=" & var_string, False
Request.send
' Check Request.status, probably for 200

一些注意事項:

  • 如果您在緩存方面遇到問題,則可能要使用POST而不是GET
  • 如果服務器可以處理,則應在POST正文中傳遞數據
  • var_string的值應轉義,在這種情況下,應使用網址編碼
  • 如果您不想阻塞等待響應,則可以異步發出請求( Trueopen第三個參數)

根據這些說明,下面是一個更詳細的示例:

Dim Request As New XMLHTTP
Request.open "POST", Url, True
Dim Handler As New CXMLHTTPHandler
Handler.Initialize Request
Set Request.onreadystatechange = Handler
Request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"    
Request.send UrlEncode("VARIABLE") & "=" & UrlEncode(var_string)
' This returns immediately, the check must now be done in the Handler

對於缺少的部分,這是CXMLHTTPHandler的代碼 ,我實際上是通過stackoverflow找到的,以及在stackoverflow定義的UrlEncode

您應該根據需要專門化CXMLHTTPHandler ,甚至可能使它接受一個AddressOf過程並在實際的默認過程中調用它。 m_xmlHttp.readyState4時,默認過程應將m_xmlHttp設置為Nothing


編輯1:如果您的請求代碼處於循環中,則需要將Dim ... New語句分成兩部分,以確保您使用的是新對象:

Dim Request As XMLHTTP
Set Request = New XMLHTTP
Request.open "POST", Url, True
Dim Handler As CXMLHTTPHandler
Set Handler = New CXMLHTTPHandler
Handler.Initialize Request
Set Request.onreadystatechange = Handler
Request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"    
Request.send UrlEncode("VARIABLE") & "=" & UrlEncode(var_string)
' This returns immediately, the check must now be done in the Handler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM