我正在尝试在以下HTML代码段中抓取所有具有className =“ disabled”的类的innerText: HTML code
我试图在MS Access(VBA)中实现的代码如下:
Set IE = CreateObject("InternetExplorer.Application")
claimLink = "https://www.XXXXX.com/"
IE.navigate claimLink
Do
DoEvents
Loop Until IE.ReadyState = 4
Set menuEnabled = IE.Document.getElementsByClassName("disabled")(0)
For Each Item In menuEnabled
MsgBox (Item.innerText & " --> " & Item.className)
Next
IE.Quit
Set menuEnabled = Nothing
Set searchres = Nothing
Set IE = Nothing
...但是,结果是,我得到了该列表中的所有项目,MS Access还说所有项目(书目数据,描述,索赔等)的类名称都被“禁用”。
有人可以告诉我我的代码有什么问题吗?我只想返回“描述”,“索赔”和“被引文件”。
These Grey items are the only items I want to be replied
谢谢! 科内留斯
答案 0 :(得分:1)
似乎需要短暂等待更新元素。我正在使用css选择器组合来定位感兴趣的元素。
.epoContentNav [class=disabled]
"."
是一个类选择器。它选择在"."
之后(即epoContentNav
之后具有类名匹配的元素。 " "
是后代组合器,表示右边的是左边的子级。 []
是一个属性选择器,它通过内部命名的属性选择一个元素。在这种情况下,我使用attribute=value
组合来指定类名称必须为disabled
。整个内容将作为具有类disabled
的父级的具有类epoContentNav
的查找元素来读取。它选择所有类别为disabled
的导航栏元素。
有关这些选择器here.
的信息Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, i As Long, nodeList
With IE
.Visible = True
.navigate "https://worldwide.espacenet.com/publicationDetails/claims?DB=&ND=&locale=en_EP&FT=D&CC=DE&NR=1952914A&KC=A&tree=false#"
While .Busy Or .readyState < 4: DoEvents: Wend
Application.Wait Now + TimeSerial(0, 0, 2)
Set nodeList = .document.querySelectorAll(".epoContentNav [class=disabled]")
For i = 0 To nodeList.Length - 1
Debug.Print nodeList.item(i).innerText, nodeList.item(i).getAttribute("class")
Next
Stop
'Quit '<== Remember to quit application
End With
End Sub