【问题标题】:VBA Selenium loop through each tableVBA Selenium 循环遍历每个表
【发布时间】:2021-10-07 01:46:45
【问题描述】:

使用 Selenium for Excel,我需要遍历网页中的每个表格以提取每个表格。 页面上通常有 7 到 10 个表格。

我当前的代码提取了第一个表,九次结束(基于计数)。 如何将每个表提取一次?

Dim bot As New ChromeDriver, tbl As Selenium.TableElement, LRow As Long

Const sURL As String = "https://www.racingandsports.com/form-guide/thoroughbred/australia/sale/2021-10-06/race-tips"

With bot
    .Get sURL

    Set tbl = .FindElementById("rank_table").AsTable
    r = .FindElementsById("rank_table").Count
    For i = 1 To r

    Sheets("Import").Select
    LRow = Cells(Rows.Count, 1).End(xlUp).Row

    tbl.ToExcel ThisWorkbook.Sheets("Import").Range("A" & LRow + 2)
Next i
End With

【问题讨论】:

    标签: excel vba selenium loops


    【解决方案1】:

    为什么您的代码会复制第一个表 9 次?

    • 在该页面中,共有 9 个元素的 id 值为 rank_table

    • 您在for 循环之外提到了Set tbl = .FindElementById("rank_table").AsTable,并且由于有多个具有相同值的id's,如果我们不指定任何内容,它总是会选择第一个元素。

    • 在您的循环中,您将首先复制的表格粘贴 9 次。

    更新代码

    Dim bot As New ChromeDriver
    Dim tbl As Selenium.TableElement
    Dim LRow As Long
    
    Const sURL As String = "https://www.racingandsports.com/form-guide/thoroughbred/australia/sale/2021-10-06/race-tips"
    
    With bot
        .Get sURL
        r = .FindElementsById("rank_table").Count
        For i = 1 To r
        Set tbl = .FindElementByXPath("(//table[@id='rank_table'])[" & i & "]").AsTable
        Sheets("Import").Select
        LRow = Cells(Rows.Count, 1).End(xlUp).Row
        tbl.ToExcel ThisWorkbook.Sheets("Import").Range("A" & LRow + 2)
    Next i
    End With
    

    我做了哪些更改以使其正常工作?

    • 创建了一个动态xPath 来遍历所有表。
    • 在循环内调用了.FindElementByXPath("xPath").AsTable

    【讨论】:

    • Nandan,首先感谢您的时间和更新......这非常有效。其次,感谢您的清晰解释。这很有意义。
    【解决方案2】:

    您可以使用 css id 选择器并使用返回 WebElements 而不是 WebElement 的方法进行收集,例如

    Dim tables As Selenium.WebElements
    
    Set tables = .FindElementsByCss("#rank_table")
    

    然后For Each tbl该集合,并使用调整现有代码将每个表写出到下一个空闲行(+表之间的任何空行间隙)。

    您也可以使用.FindElementsById("rank_table"),因为它似乎存在该方法,尽管我从未使用过它。

    【讨论】:

    • 非常感谢QHarr
    • 不客气
    猜你喜欢
    • 2018-01-05
    • 2017-11-26
    • 2011-03-09
    • 2017-04-26
    • 2017-02-04
    • 2014-11-15
    • 2017-10-19
    • 2014-06-29
    • 2017-07-19
    相关资源
    最近更新 更多