【问题标题】:Excel VBA get data from web with msxml2.xmlhttp - how do I accept cookies automatically?Excel VBA 使用 msxml2.xmlhttp 从 Web 获取数据 - 如何自动接受 cookie?
【发布时间】:2014-05-04 18:50:13
【问题描述】:

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

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

我的问题是,我需要添加什么代码才能自动接受 cookie,因为我正在批量循环此代码并且不能让它挂起等待我手动接受 cookie。您的帮助将不胜感激!!!下面是代码 sn-p(我实际上是在 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

【问题讨论】:

    标签: vba excel cookies xmlhttprequest


    【解决方案1】:

    这周我也遇到了同样的问题。

    在 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", "")
    

    如果您仍有问题,希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 2021-12-20
      • 1970-01-01
      • 2017-12-25
      • 2014-04-03
      • 2013-05-28
      • 2018-02-25
      • 1970-01-01
      相关资源
      最近更新 更多