MSXML2.XMLHTTP 可以和 Chrome 一起使用吗
Can MSXML2.XMLHTTP be used with Chrome
我一直在使用以下 Excel VBA 宏从网站取回数据。直到几天前该网站停止支持 IE 之前,它一直运行良好。当然,宏现在只是失败了,因为网页上没有数据可以带回 Excel,只有一条消息说,“不再支持您的浏览器 Internet Explorer。”有没有办法让“Get 方法”(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
阅读 Daniel Pineault 的文章和这一段:
另请注意我于 2020 年 9 月 13 日发表的评论。
对此的检查是对用户代理的基本服务器检查。通过在 UA header 中传递受支持的浏览器来告诉它它想“听到”什么……(或者在技术上,在这种情况下,只是说等同于:“嗨,我不是 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"
进行比较。
我一直在使用以下 Excel VBA 宏从网站取回数据。直到几天前该网站停止支持 IE 之前,它一直运行良好。当然,宏现在只是失败了,因为网页上没有数据可以带回 Excel,只有一条消息说,“不再支持您的浏览器 Internet Explorer。”有没有办法让“Get 方法”(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
阅读 Daniel Pineault 的文章和这一段:
另请注意我于 2020 年 9 月 13 日发表的评论。
对此的检查是对用户代理的基本服务器检查。通过在 UA header 中传递受支持的浏览器来告诉它它想“听到”什么……(或者在技术上,在这种情况下,只是说等同于:“嗨,我不是 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"
进行比较。