2014-03-26 277 views
0

需要你的專業知識和幫助,因爲我環顧四周,但沒有找到一個解決方案:Excel VBA從msxml2.xmlhttp從網站獲取數據 - 我如何自動接受cookie?

我從一個網站使用MSXML2.XMLHTTP方法上傳信息到Excel(這樣做是較早通過webquery但它得到經過幾次迭代後,它會停滯不前)。我的問題是,現在每次迭代時,我都會彈出一個Windows安全警告,要求我從網站接受一個cookie。請注意,該網站不需要登錄名/密碼。我從之前的文章中瞭解到,出於安全原因,msxml2.xmlhttp方法會刪除Cookie,但即使將方法更改爲winhttp,我也會收到相同的消息。我也改變了IE的設置,自動從網站接受所有的cookies,但沒有幫助。

我的問題是,我需要添加哪些代碼才能自動接受Cookie,因爲我正在循環播放此代碼,並且無法讓它等待我手動接受Cookie。您的幫助將非常感謝!下面是代碼片段(我實際上在Stackoverflow上找到了這個代碼片段)。

Set htm = CreateObject("htmlFile") 
With CreateObject("msxml2.xmlhttp") 
    .Open "GET", "http://finance.yahoo.com/q/ae?s=" & Ticker & "+Analyst+Estimates", False 
    .send 
    htm.body.innerHTML = .responseText 
End With 
Set elemCollection = htm.getElementsByTagName("td") 
For Each itm In elemCollection 
    If itm.className = "yfnc_tabledata1" Then 
     ActiveCell = itm.innerText 
     If ActiveCell.Column = 7 Then 
      ActiveCell.Offset(1, -6).Select 
     Else 
      ActiveCell.Offset(0, 1).Select 
     End If 
    End If 
Next 

回答

0

本週我有同樣的問題。

谷歌和嘗試一些想法之後,我添加了兩個MsgBox語句到我的代碼。

objXMLDoc.Open "GET", strURL, False 
objXMLDoc.send 
MsgBox "After XMLDoc.send", vbOKOnly, "Test" 
objHTMLDoc.body.innerHTML = objXMLDoc.responseText 
MsgBox "After .innerHTML assignment", vbOKOnly, "Test" 

我發現彈出安全警告窗口.innerHTML分配,即後總是出現,問題是無關的XMLHTTP。它是HTMLDocument,它會導致彈出窗口。

我猜objHTMLDoc.body.innerHTML = objXMLDoc.responseText不只是做一個簡單的值賦值。它還必須根據網頁的內容引發一些操作。

我查了一下網頁,發現像這樣的代碼:

YUI().use('node','event','event-mouseenter','substitute','oop','node-focusmanager','node','event','substitute','**cookie**','event-resize','node', 'event', 'querystring-stringify','node','event','node','event','event-custom','event-valuechange','classnamemanager','node', function(Y) {}) 

然後,我改變了我的代碼如下,並在彈出的警告窗口消失。

objXMLDoc.Open "GET", strURL, False 
objXMLDoc.send 
objHTMLDoc.body.innerHTML = Replace(objXMLDoc.responseText, "cookie", "") 

希望這可以是有益的,如果你仍然有問題。