我以前做过很少的VBA + IE连接,特别是关于选择不同的按钮和列表[包括自动数据输入,例如登录,日期等]。但是,我还没有将IE中的特定数据复制到excel之前。
问题是如何从IE中提取这些数据到excel。即数字257(每天都在变化)。另外一个问题是IE页面的结构[这是Google Analytics]。在你告诉我我可以在GA页面上使用“导出”之前,请注意我的大多数选项都被阻止了。此外,谷歌驱动器和谷歌文档是不合适的。
源代码的一部分是:
<div class="_GAlF _GALn">P R R</div>
<div class="_GAef" id="ID-layout-1536671725872"><div class="_GANY"><div class="_GAxN"><img width="75" height="18" class="_GANU" alt="" src="s/cleardot.gif"></div><div><div class="_GAeS _GAHeb _GAA6">257</div></div><div><span class="_GAkhb">% of Total:</span> <span class="_GAvQb">0.04%</span> <span class="_GAqs">(601,038)</span></div></div></div>
<div class="_GANY"><div class="_GAxN"><img width="75" height="18" class="_GANU" alt="" src="s/cleardot.gif"></div><div><div class="_GAeS _GAHeb _GAA6">257</div></div><div><span class="_GAkhb">% of Total:</span> <span class="_GAvQb">0.04%</span> <span class="_GAqs">(601,038)</span></div></div>
<div class="_GAxN"><img width="75" height="18" class="_GANU" alt="" src="s/cleardot.gif"></div>
<div><div class="_GAeS _GAHeb _GAA6">257</div></div>
<div class="_GAeS _GAHeb _GAA6">257</div>
清洁截图:
是否可以通过“ID-layout”识别该值,这似乎是这个特定盒子的独特之处?然而,无论如何,这将不得不下降到257的价值区域。请指教。谢谢。
这就是我得到的问题:
对于显示的HTML,您可以尝试使用父ID和本地类属性选择器组合缩小范围
ThisWorkbook.Worksheets("Sheet1").Cells(1,1) = ie.document.querySelector("#ID-layout-1536671725872 [class='_GAeS _GAHeb _GAA6']").innerText
并非所有选择器都显示在下面的查询框中,但这是结果:
在给定小HTML样本的情况下,添加id选择器以尝试和本地化类选择器。 "#"
是id CSS选择器,"[]"
是属性选择器。
选择器组合通过.querySelector
文档方法应用。如果您使用IE8以上,这应该工作正常。
如果页面不是JS重/慢加载你可能会放弃IE开放发出XMLHTTP请求:
Dim html As New HTMLDocument '<==Tools > references > add reference to microsoft html object library
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.send
sResponse = StrConv(.responseBody, vbUnicode)
sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
With html
.body.innerHTML = sResponse
ThisWorkbook.Worksheets("Sheet1").Cells(1,1) = .querySelector("#ID-layout-1536671725872 [class='_GAeS _GAHeb _GAA6']").innerText
End With
End With
类“_GAeS _GAHeb _GAA6”仅用于此行吗?
如果是,这应该工作:
IE.document.getElementsByClassName("_GAeS _GAHeb _GAA6")(0).innerText