【问题标题】:VBA to copy the value from Google Analytics [opened in IE] site to ExcelVBA 将值从 Google Analytics [在 IE 中打开] 站点复制到 Excel
【发布时间】:2019-05-10 14:52:46
【问题描述】:

我之前很少进行 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 布局”来识别该值,这似乎是该特定框所独有的?然而,无论如何,这将不得不下降到拥有 257 价值的区域。请指教。谢谢你。

这就是我得到的问题:

【问题讨论】:

    标签: html excel vba internet-explorer web-scraping


    【解决方案1】:

    对于显示的 HTML,您可以尝试使用父 ID 和本地类属性选择器组合来缩小范围

    ThisWorkbook.Worksheets("Sheet1").Cells(1,1) =  ie.document.querySelector("#ID-layout-1536671725872 [class='_GAeS _GAHeb _GAA6']").innerText
    

    并非所有选择器都显示在下面的查询框中,但结果如下:

    添加 id 选择器以尝试本地化类选择器,给定小的 HTML 示例。 "#" 是 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
    

    【讨论】:

    • 我会处理它并更新你 - 从我最初的测试来看,它似乎有效(因此投票赞成)。很抱歉,我无法提供链接,抱歉。
    • QHarr 你能澄清一下如何将这个值 257 传输到 excel 文件(其中包含您的代码的文件)(任何工作表/任何单元格)。谢谢
    • 我在这一行得到一个“需要的对象”:.body.innerHTML = sResponse PS。我已将“URL”替换为实际 URL。我需要用“GET”做什么吗?
    • 不知何故我的“工具”是灰色的。我无法将 HTMLDoc 添加到 MSFT 库。
    • 已排序。现在我在“ThisWorkbook ...”行中遇到错误:运行时错误91对象变量
    【解决方案2】:

    类“_GAeS _GAHeb _GAA6”是否只用在这一行?

    如果是,这应该有效:

    IE.document.getElementsByClassName("_GAeS _GAHeb _GAA6")(0).innerText
    

    【讨论】:

    • 其实是这个问题,“_GAeS _GAHeb _GAA6”用在其他6个窗口(我也想参考一下)。
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    相关资源
    最近更新 更多