Excel VBA使用相同的类名称刮擦li标签

我试图刮去共享相同的类名HTML标签看起来像这样的标签:

<ul class="top-section-list" data-selenium="highlightList"> <li class="top-section-list-item">sample text# 1</li> <li class="top-section-list-item">sample text# 2</li> <li class="top-section-list-item">sample text# 3</li> <li class="top-section-list-item">sample text# 4</li> <li class="top-section-list-item">sample text# 5</li> </ul> 

这是我的VBA代码,只能抓住第一个列出的项目,而不是其余的。

  Sub GetData() Dim objIE As InternetExplorer Dim itemEle As Object Dim data As String Dim y As Integer Set objIE = New InternetExplorer objIE.Visible = True objIE.navigate "https://www.bhphotovideo.com/c/product/1312545-REG/fujifilm_16550643_instax_mini_9_instant.html" Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop For Each itemEle In objIE.document.getElementsByClassName("top-section-list") data = itemEle.getElementsByTagName("li")(0).innerText Next Range("A1").Value = data End Sub 

它只写入单元格A1:“示例文本#1”我怎样才能把所有的标签写入单元格A1? 所需的结果将是单元格A1:示例文本#1示例文本#2示例文本#3示例文本#4示例文本#5

谢谢!

最简单的方法可能是这样的:

 Dim data As String Dim elem as object data = "" For Each elem In html.getElementsByClassName("top-section-list")(0).getElementsByTagName("li") data = data & " " & elem.innerText Next elem [A1] = data 

输出:

  sample text# 1 sample text# 2 sample text# 3 sample text# 4 sample text# 5 

现在,给这个镜头:

 Sub GetData() Dim IE As New InternetExplorer, html As HTMLDocument Dim elem As Object, data As String With IE .Visible = True .navigate "https://www.bhphotovideo.com/c/product/1312545-REG/fujifilm_16550643_instax_mini_9_instant.html" Do While .readyState <> READYSTATE_COMPLETE: Loop Set html = .document End With data = "" For Each elem In html.getElementsByClassName("top-section-list")(0).getElementsByTagName("li") data = data & " " & elem.innerText Next elem Range("A1").Value = data IE.Quit End Sub 

我试图改进你的代码,给一个稍微愉快的样子。

引用添加到库中:

 Microsoft Internet Controls Microsoft HTML Object Library 

还有一件事:正如Jeeped所指出的那样,如果你得到一个尾随的空间,那么你可以尝试一些类似于Range("A1").Value = Trim(Application.WorksheetFunction.Clean(data))

将string值连接到带有vbLF分隔符的数据stringvar。

 dim data as string, i as long data = vbNullString with objIE.document.getElementsByClassName("top-section-list")(0) For i = 0 to .getElementsByTagName("li").Length - 1 data = data & vblLF & .getElementsByTagName("li")(i).innerText Next end with Range("A1").Value = Mid(data, 2) 'write data INTO A1, not the other way around