当存在多个相同的类名时,如何使用“ getelementsbyclassname”?

时间:2019-05-14 08:53:32

标签: vba internet-explorer web-scraping getelementsbyclassname

我正在尝试使用'span'标签上的getelementsbyclassname解析内部文本。但是,有几种不同的内部文本与相同的类名匹配。我该如何解析内部文本?

https://finance.naver.com/item/sise_day.nhn?code=063760->是我要从中解析的Internet Explorer文档。

我想获取特定的内部文本“ 15,550”,它是昨天的收盘价。

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试参考下面的示例代码可能会帮助您找到内部文本= 15,550。

Sub demo()
Dim element As IHTMLElement
Dim elements As IHTMLElementCollection
Dim ie As InternetExplorer
Dim val, val1 As String
Dim html As HTMLDocument
val = "15,550"


Set ie = New InternetExplorer

ie.Visible = True

ie.Navigate "https://finance.naver.com/item/sise_day.nhn?code=063760"
'Wait until IE has loaded the web page

Do While ie.ReadyState <> READYSTATE_COMPLETE


DoEvents

Loop

Set html = ie.document

Set elements = html.getElementsByClassName("tah p11")

Dim count As Long
Dim erow As Long
count = 1
For Each element In elements
If element.className = "tah p11" Then
erow = Sheet1.Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row
val1 = html.getElementsByClassName("tah p11")(count).innerText

If val = val1 Then
Cells(erow, 1) = html.getElementsByClassName("tah p11")(count).innerText

End If
count = count + 1
End If
Next element
End Sub

输出:

enter image description here

这只是示例代码,供您参考。此外,您可以尝试修改代码以获得所需的输出。

答案 1 :(得分:0)

在表中定位时,通过nth-of-type CSS选择器利用行和列索引。您需要第四行第二列。鉴于现代网站对此进行了优化,因此我将CSS选择器用作一种更快的方法。

        const options = {
          types: ['geocode'],
          offset: 5,
          language: 'en',
          fields: ['address_components', 'formatted_address', 'geometry'],
          sessionToken: generateUniqueId()
        }


        autocompleteObject = new google.maps.places.Autocomplete(inputDom, {
          sessionToken: generateUniqueId()
        })


您可以简单地缩短为

ie.document.querySelector(".type2 tr:nth-of-type(4) td:nth-of-type(2)").innerText

作为该坐标在页面上的第一个表格。

我看不到任何有用的信息,但也许还要检查APIs