Excel VBA使用msxml2.xmlhttp从Web获取数据 - 如何自动接受cookie?

时间:2014-03-26 11:37:24

标签: excel vba excel-vba cookies xmlhttprequest

需要你的专业知识和帮助,因为我环顾四周,无法找到解决方案:

我正在使用msxml2.xmlhttp方法从网站上传信息到Excel(之前通过webquery做过,但是经过几次迭代后它会卡住加上它会变慢)。我的问题是,现在每次迭代,我都会弹出一个Windows安全警告,要求我接受网站上的cookie。请注意,该网站不需要登录/密码。我从之前的帖子中了解到,出于安全原因,msxml2.xmlhttp方法会删除cookie,但即使我将方法更改为winhttp,也会收到相同的消息。我还更改了IE中的设置以自动接受来自网站的所有cookie,但它没有帮助。

我的问题是,我需要添加哪些代码才能自动接受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

1 个答案:

答案 0 :(得分:0)

本周我遇到了同样的问题。

google并尝试了一些想法后,我在代码中添加了两个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", "")

希望如果您仍有问题,这可能会有所帮助。