我需要第二个表中与 VBA Selenium 具有相同类名的数据

问题描述 投票:0回答:1

我想从网页获取一些数据。我需要来自两个表的数据,但两个表具有相同的类名。

我无法让项目(2)工作。

我对 VBA 并不陌生,但对 Selenium 却很陌生。

我能够从第一个表中获取数据,而不是从第二个表中获取数据。我搜索了几个网站,但还没有有效的解决方案。

Sub GetData()

Dim DRow As Byte
Dim DCol As Byte

    Dim WebDrv As New WebDriver

        Dim tr As Object
        Dim td As Object

WebDrv.Start "Chrome"
WebDrv.Get "https://stripinfo.be/reeks/strip/11316_Jeremiah_5_Het_eindeloos_experiment"

Application.Wait Now + TimeValue("00:00:1")

[D7] = WebDrv.FindElementByClass("title").Text

DRow = 8
DCol = 4

For Each tr In WebDrv.FindElementByClass("innerDividers").FindElementByTag("tbody").FindElementsByTag("tr")

    For Each td In tr.FindElementsByTag("td")
        Cells(DRow, DCol).Value = td.Text
        DCol = DCol + 1
    Next td
    DRow = DRow + 1
    DCol = 4

Next tr

DRow = 15

For Each tr In WebDrv.FindElementByClass("innerDividers").FindElementByTag("tbody").FindElementsByTag("tr")

    For Each td In tr.FindElementsByTag("td")
        Cells(DRow, DCol).Value = td.Text
        DCol = DCol + 1
    Next td
    DRow = DRow + 1
    DCol = 4

Next tr

Application.Wait Now + TimeValue("00:00:1")

End Sub
vba selenium-webdriver html-table excel-2010
1个回答
0
投票

一些选项:

  1. 更改为返回 webElements 和引用集合索引的方法,或使用
    For Each
    枚举器
Dim tables As Selenium.WebElements, table As Selenium.Table, t As Long

Set tables = WebDrv.FindElementsByClass("innerDividers")

For Each table in tables
    'do something with table here

    If t = 1 Then Exit For
    t = t + 1
Next

您还可以使用 CSS 选择器列表来仅获取这 2 个表

Set tables = WebDrv.FindElementsByCss("section:nth-child(2) div:nth-child(3) div:nth-child(-n+3) table")

随着时间的推移,后者可能不太稳健,但对于短期项目来说效率更高。

选择你的毒药。

© www.soinside.com 2019 - 2024. All rights reserved.