如何在vba中获取网页上的下一个元素

如何在vba中获取网页上的下一个元素,vba,element,webpage,Vba,Element,Webpage,我正试图建立一个VBA宏来从网站上获取大量数据。具体地说,我从页面开始,我想下拉到以“银河事件”开头的部分,并从下面的列表中取出每一项 因此,我有以下几点: Dim IE As New InternetExplorer IE.Visible = True IE.navigate "https://stt.wiki/wiki/Galaxy_Event" Do DoEvents Loop Until IE.readyState = READYSTATE_COMPLETE Dim Doc As

我正试图建立一个VBA宏来从网站上获取大量数据。具体地说,我从页面开始,我想下拉到以“银河事件”开头的部分,并从下面的列表中取出每一项

因此,我有以下几点:

Dim IE As New InternetExplorer
IE.Visible = True
IE.navigate "https://stt.wiki/wiki/Galaxy_Event"
Do
    DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
Dim sH2 As String
我知道我能行 sH2=Trim(Doc.getElementsByClassName(“mw标题”)(0.innerText)

要查看等同于“星系事件”的元素,但我没有找到一种方法来获取下一个元素,因为它不是一个与星系事件具有任何共同属性的元素。我不太愿意通过LI(Doc.getElementsByTagName(“LI”)(9))来定位它,因为该网站可能会改变并破坏我正在做的一切(尽管我认为我可以循环浏览LI项目,直到找到一个没有类的项目)


不管怎么说,当下一个元素在各个方面都是不同的类型时(我尝试了FirstChild,但返回了一个错误),我该如何继续往下看下一个元素呢。API是接收内容的最佳方式

在并没有API的情况下,我会收集该部分中的链接列表,并在寻找特定标题时循环

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub GetData()
    Dim ie As New InternetExplorer, i As Long
    With ie
        .Visible = True
        .Navigate2 "https://stt.wiki/wiki/Galaxy_Event"
        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim galaxyEvents As Object
        Set galaxyEvents = .document.querySelectorAll("ol li > a[title]")
        For i = 0 To galaxyEvents.Length - 1
            Debug.Print galaxyEvents.item(i).Title
            'Or any comparison required here then Exit For if found
        Next
        .Quit
    End With
End Sub
选项显式
'VBE>工具>参考:
“Microsoft Internet控件
公共子GetData()
Dim ie作为新的InternetExplorer,我希望
与ie
.Visible=True
.导航2“https://stt.wiki/wiki/Galaxy_Event"
当.Busy或.readyState<4:DoEvents:Wend时
Dim galaxyEvents作为对象
设置galaxyEvents=.document.querySelectorAll(“ol li>a[title]”)
对于i=0到galaxyEvents.Length-1
调试.打印galaxyEvents.item(i).标题
'或此处所需的任何比较,如果找到,则退出
下一个
退出
以
端接头

看起来您可以尝试使用现有的API,尽管我不得不通过相关的wiki API语法进行破解。需要添加到project,然后是VBE>工具>引用>添加对Microsoft脚本运行时的引用

Option Explicit
Public Sub GetInfo()
    Dim json As Object, dict As Object, link As String
    Const BASE_URL As String = "https://stt.wiki/wiki/"

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://stt.wiki/w/api.php?action=parse&format=json&page=Galaxy_Event&section=1", False
        .send
        Set json = JsonConverter.ParseJson(.responseText)("parse")("links") '<==Will include references links
        For Each dict In json
            link = dict("*")
            Debug.Print link
            Debug.Print BASE_URL & Replace$(link, Chr$(32), Chr$(95))
        Next
    End With
End Sub
选项显式
公共子GetInfo()
Dim json作为对象,dict作为对象,link作为字符串
Const BASE_URL作为字符串=”https://stt.wiki/wiki/"
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”https://stt.wiki/w/api.php?action=parse&format=json&page=Galaxy_Event§ion=1”“错
邮寄

设置json=JsonConverter.ParseJson(.responseText)(“parse”)(“links”)作为任何人的参考点:我接下来需要从每个链接获取url。我可以使用galaxyEvents.item(I).href来实现这一点