【问题标题】:Can MSXML2.XMLHTTP be used with ChromeMSXML2.XMLHTTP 可以与 Chrome 一起使用吗
【发布时间】:2021-04-01 21:01:33
【问题描述】:

我一直在使用以下 Excel VBA 宏从网站带回数据。直到几天前该网站停止支持 IE 时,它才能正常工作。当然,宏现在只是失败了,因为网页上没有数据可以带回 Excel,只有一条消息说:“不再支持您的浏览器 Internet Explorer。”有没有办法让“获取方法”(MSXML2.XMLHTTP)使用 Chrome 而不是 IE 与网站交互?顺便说一句,我的默认浏览器已经设置为“Chrome”。

Dim html_doc As HTMLDocument        ' note: reference to Microsoft HTML Object Library must be set

Sub KS()    
' Define product url
    KS_url = "https://www.kingsoopers.com/p/r-w-knudsen-just-blueberry-juice/0007468210784"
    
' Collect data
        Set html_doc = New HTMLDocument
        Set xml_obj = CreateObject("MSXML2.XMLHTTP")
        
        xml_obj.Open "GET", KS_url, False
        xml_obj.send
        html_doc.body.innerHTML = xml_obj.responseText
        Set xml_obj = Nothing
  
        KS_product = html_doc.getElementsByClassName("ProductDetails-header")(0).innerText
        KS_price = "$" & html_doc.getElementsByClassName("kds-Price kds-Price--alternate mb-8")(1).Value

      do Stuff

End Sub

【问题讨论】:

  • @BigBen 谢谢,实际打开网页实在是太费时了。如果可能的话,我宁愿坚持使用更快的“GET”方法。

标签: excel vba internet-explorer selenium-chromedriver


【解决方案1】:

对此的检查是对用户代理的基本服务器检查。通过在 UA 标头中传递支持的浏览器来告诉它它想“听到”什么......(或者从技术上讲,在这种情况下,只是说相当于:“嗨,我不是 Internet Explorer”。)

它可以像xml.setRequestHeader "User-Agent", "Chrome" 一样简单。我说基本是因为你甚至可以传递xml.setRequestHeader "User-Agent", "I am a unicorn",所以它很可能是 Internet Explorer 服务器上基于排除的列表。

Option Explicit

Public Sub KS()
    Dim url As String

    url = "https://www.kingsoopers.com/p/r-w-knudsen-just-blueberry-juice/0007468210784"
    Dim html As MSHTML.HTMLDocument, xml As Object
    
    Set html = New MSHTML.HTMLDocument
    Set xml = CreateObject("MSXML2.XMLHTTP")
       
    xml.Open "GET", url, False
    xml.setRequestHeader "User-Agent", "Mozilla/5.0"
    xml.send
    html.body.innerHTML = xml.responseText

    Debug.Print html.getElementsByClassName("ProductDetails-header")(0).innerText
    Debug.Print "$" & html.getElementsByClassName("kds-Price kds-Price--alternate mb-8")(1).Value

    Stop

End Sub

对比不添加UA或添加xml.setRequestHeader "User-Agent", "MSIE"

【讨论】:

  • 感谢 QHarr,清晰完整,正是我想要的。
【解决方案2】:

研究 Daniel Pineault 的文章和这段:

Feature Browser Emulation

另请注意我在 2020-09-13 发表的评论。

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2019-01-13
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多