我想知道为什么MSXML2.ServerXMLHTTP对象的响应属性没有返回完整的html源代码。它似乎只返回“内部html”。我可以创建一个IE对象并获取“外部html”,但由于我有数百个搜索项目,因此效率不高。
我有下面显示的函数(带有URL),它将HTML内容分配给字符串。
Sub test()
Dim myString As String
myString = getECICS2("103-90-2") ' myString only contains inner html
End Sub
Public Function getECICS(ByVal casNum As String) As String
Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
XMLhttp.setTimeouts 2000, 2000, 2000, 2000
XMLhttp.Open "GET", "http://ec.europa.eu/taxation_customs/dds2/ecics/chemicalsubstance_consultation.jsp?Lang=en&Cas=" & casNum & "&Cus=&CnCode=&EcCode=&UnCode=&Name=&LangNm=en&Inchi=&Characteristic=&sortOrder=1&Expand=true&offset=0&range=25", False
XMLhttp.send
If XMLhttp.Status = 200 Then
getECICS = XMLhttp.responseText
Else
getECICS = ""
End If
End Function
提前致谢
答案 0 :(得分:1)
如果您运行下面的代码,它会将响应转储到html文件中,您可以在Chrome / IE / FF等中查看
Sub test()
Dim myString As String
myString = getECICS("103-90-2") ' myString only contains inner html
End Sub
Public Function getECICS(ByVal casNum As String) As String
Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
XMLhttp.setTimeouts 2000, 2000, 2000, 2000
XMLhttp.Open "GET", "http://ec.europa.eu/taxation_customs/dds2/ecics/chemicalsubstance_consultation.jsp?Lang=en&Cas=" & casNum & "&Cus=&CnCode=&EcCode=&UnCode=&Name=&LangNm=en&Inchi=&Characteristic=&sortOrder=1&Expand=true&offset=0&range=25", False
XMLhttp.send
If XMLhttp.Status = 200 Then
getECICS = XMLhttp.responseText
Else
getECICS = ""
End If
outputtext (getECICS)
End Function
Function outputtext(text As String)
Dim MyFile As String, fnum As String
MyFile = ThisWorkbook.Path & "\" & "test.html"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
'use Print when you want the string without quotation marks
Print #fnum, text
Close #fnum
End Function
不幸的是,最简单的解决方案是在启用浏览器或脚本的解决方案中运行自动化以获取所需的数据。
现在,许多网站都使用javascript / AJAX / Login会话来控制资源的速度和访问权限,因此您不能总是通过不使用浏览器来获得所需的速度。
答案 1 :(得分:0)
请查看XMLHttpRequest
...
responseText
以文本
responseXML
将主体作为DOM对象返回
我认为你在追随:XMLhttp.response
,它会返回整个回复。
或者可能:XMLhttp.responseBody
?
我不是完全确定这个'因为我自己只使用过C ++界面。
请参阅:http://msdn.microsoft.com/en-us/library/windows/apps/hh453379.aspx#methods