如何在vba中获取网页上的下一个元素
我正试图建立一个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
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§ion=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来实现这一点