vba - VBA Web Scraping- 抓取“hrefs”列表
问题描述
我想抓取包含在可点击链接中的名称列表。但是我没有得到结果。在第二步中,我想为每个标题创建一个新标签。
如果有人能给我提示我的编码有什么问题以及如何优化它,那就太好了。
提前感谢您的帮助!
Option Explicit
Sub Teams()
Dim IE As SHDocVw.InternetExplorer
Dim HTMLdoc As MSHTML.HTMLDocument
Dim li_all As MSHTML.IHTMLElementCollection
Dim li_single As Object
Dim i As Long
Set IE = New SHDocVw.InternetExplorer
IE.Visible = False
IE.Navigate "https://www.examplexyz.de/"
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Application.Wait (Now + TimeValue("0:00:07"))
Set HTMLdoc = IE.Document
Set li_all = HTMLdoc.getElementsByClassName("icon_holder")
For i = 0 To li_all.Length - 1
li_single = li_all(0).getElementsByTagName("li").Item(i).innerText
Debug.Print li_single
Next
IE.Quit
End Sub
'Helper function to get a child (of `obj`) element's text using its className
' (only handles a single instance but could be extended)
Function classText(obj As Object, classname As String) As String
Dim els As Object
Set els = obj.getElementsByClassName(classname)
If els.Length > 0 Then
classText = els(0).innerText
Else
classText = "[not found]"
End If
End Function
解决方案
我找到了一个解决方案,如何使用 queryselectorall 读取所有链接文本。但是目前我多次获得链接文本,因为链接文本在较低级别中多次存在。
我如何设法只读出“li”的第一级?
Sub Neu()
Dim objIE As InternetExplorer, nodeList As Object, OutputString As String, currentItem As Long
Set objIE = New InternetExplorer
objIE.Visible = False
objIE.Navigate "https://www.examplexyz.de/"
Do While objIE.ReadyState <> READYSTATE_COMPLETE
Loop
Application.Wait (Now + TimeValue("0:00:05"))
Set nodeList = objIE.Document.querySelectorAll("div.icon_holder a")
For currentItem = 0 To nodeList.Length - 1
OutputString = nodeList.Item(currentItem)
Debug.Print currentItem & " " & OutputString
Next currentItem
End Sub
推荐阅读
- javascript - Javascript/jQuery 从每个循环中获取先前的数组值
- laravel - Laravel 包开发 - 包中的覆盖视图不起作用
- powerbi - 如何检索处于“等待到达”模式的产品
- python - 熊猫数据框两个循环任务
- javascript - 如何在 html 中使用 JSON 文件?
- javascript - 在 LocalStorage 中覆盖了添加的重复数据
- ionic-framework - ion-segment-button 指示器轮廓边框
- python - 查找“类别”列的平均值?
- c# - 无法在 C# 中以编程方式填充 Form.CheckBox 数组
- c - 如何通过 Visual Studio Code 检查整个项目的 C 代码错误?