从url到excel的按位置靠近的VBA代码

从url到excel的按位置靠近的VBA代码,vba,web-scraping,msxml,Vba,Web Scraping,Msxml,我正在尝试从url到excel获取连接、基础结构和邻域信息。下面是我尝试过的vba代码,但我收到错误运行时错误“91”:对象变量或未设置块变量 子测试() 作为HTMLDocument的Dim oHtml 作为对象的模糊元素 设置oHtml=新HTMLDocument 使用CreateObject(“WINHTTP.WinHTTPRequest.5.1”) .打开“获取”https://www.99acres.com/dasnac-the-jewel-of-noida-sector-75-no

我正在尝试从url到excel获取连接、基础结构和邻域信息。下面是我尝试过的vba代码,但我收到错误运行时错误“91”:对象变量或未设置块变量

子测试()
作为HTMLDocument的Dim oHtml
作为对象的模糊元素
设置oHtml=新HTMLDocument
使用CreateObject(“WINHTTP.WinHTTPRequest.5.1”)
.打开“获取”https://www.99acres.com/dasnac-the-jewel-of-noida-sector-75-noida-npxid-r14046?src=NPSRP&sid=UiB8IFFTIHwgUyB8IzEjICB8IG5vaWRhIzUjIHwgQ1AyNSB8IFkgIzE4I3wgIHwgMjUgfCMzIyAgfCA3ICM1I3wgIHwgMjMgfCM0MyMgIHw="
.发送
oHtml.body.innerHTML=.responseText
以
ele3=oHtml.getElementById(“locHighlightsSlide”)
范围(“A1”)=ele3.innerText

End Sub
您可以使用CSS选择器,这些选择器是用于选择元素的模式。对于您的HTML示例模式,有效的模式有:

  • 第一列带有:
    .vsp项。highlightsCard:First child
  • 第二列带有:
    .vsp item.highlightsCard:n子项(2)
  • 第三列带有:
    .vsp item.highlightsCard:last child
  • 标题为:
    .highlightsCardHeading
  • 上述选择器中的
    ,即通过
    className
    选择元素


    CSS查询结果

    第1列连接:

    第2栏基础设施:

    第3栏邻里:

    标题:

    观察结果:上述查询结果表明,
    列1-3
    需要单个节点,即
    .querySelector
    ;请注意,
    0
    是返回的唯一匹配项。然而,
    需要
    .querySelectorAll
    ,返回节点列表,正如我们可以看到
    0-2
    返回的那样


    VBA:

    我无法访问网站进行查询,但
    .querySelector
    方法属于HTMLDocument,通常(使用HTMLDocument变量
    oHTML
    ):

    对于单个节点:

    oHtml.querySelector(".vsp-item.highlightsCard:first-child")
    
    对于节点列表:

    oHtml.querySelectorAll(".highlightsCardHeading")
    
    如果是节点列表,则使用以下命令迭代其项:

    Dim headerNodeList As Object, i As Long
    Set headerNodeList = oHtml.querySelectorAll(".highlightsCardHeading")
    
    For i = 0 To headerNodeList.Length - 1
        Debug.Print headerNodeList.item(i).innerText '<==this way          '
       'Debug.Print headerNodeList(i).innerText    '<==Or this method
    Next i
    

    注意事项:

    我无法从您的请求中检查
    .responseText
    (或者更确切地说,由于与站点的连接失败,它没有意义)。这种方法可能不会返回所需的信息,特别是对于动态加载的页面。不过,我相信
    WinHTTPRequest.5.1
    有一个您可以使用的响应状态

    在这种情况下,您可能需要使用另一种方法,例如基于IE浏览器的方法,并等待页面加载。您仍然可以使用
    .querySelector
    .querySelectorAll
    方法
    HTMLDocument


    脚本示例:

  • IE
    的方法如下:
  • WinHTTP的方法:或

  • 信息:


  • 您需要这些字段中的哪些信息:徽标?你甚至不觉得有必要澄清你的问题,你的输出可能是怎样的。嗨,QHarr,谢谢你的帮助!!!你提供了完整的信息,这对我真的很有帮助!!!!saransh愉快
    Dim col1Node As Object: Set col1Node = oHtml.querySelector(".vsp-item.highlightsCard:first-child"): Debug.Print col1Node.innerText
    Dim col2Node As Object: Set col2Node = oHtml.querySelector(".vsp-item.highlightsCard:nth-child(2)"): Debug.Print col2Node.innerText
    Dim col3Node As Object: Set col3Node = oHtml.querySelector(".vsp-item.highlightsCard:last-child") : Debug.Print col3Node.innerText