0

我正在使用 Selenium.Driver 查找应该在网页中返回特定表格的 div 类元素。虽然通过按标签查找方法成功抽象了整个页面,但我现在面临的挑战是,只返回页面中的表格,除了表格类被列为“复合名称”并且在 Selenium 中不受支持:我我尝试了 .xpath 和 .css 方法都没有成功。我的失败可能是由于使用了错误的表达方式。

我的代码:

Set HTMLTables = HTMLDoc.FindElementsByTag("table")

' The above code returns all elements within the entire page.

' Instead of finding elements by "table" tag,
' I wanna FindElement(s)By...("table table-bordered table-condensed table-striped 
  text-center table-hover")
' The given code shall return ONLY the TABLE from within the entire page.

这是update我的一个问题,我已经添加了 themicro和 target html pageurl链接也贴出来了。

代码: 在此处输入图像描述

网址链接:https ://portalseven.com/lottery/southafrica_powerball_winning_numbers.jsp?viewType=2&timeRange=3


如果您正在寻找所有复合类,请选择此

Dim Table As Selenium.WebElement
Set Table = driver.FindElementByXPath("//*[@class='table table-bordered table-condensed table- striped text-center table-hover']")

如果您正在寻找复合类的一部分,您也可以使用

Dim FindBy As New Selenium.By
If Not driver.IsElementPresent(FindBy.Class("table-condensed"), 3000) Then
    driver.Quit
    Exit Sub
Else
    ' do something ...
    Set Table = driver.FindElement(FindBy.Class("table-condensed"))
End If

或者

Dim FindBy As New Selenium.By
If Not driver.IsElementPresent(FindBy.Css(".table-bordered"), 3000) Then
    driver.Quit
    Exit Sub
Else
    ' do something ...
    Set Table = driver.FindElement(FindBy.Css(".table-bordered"))
End If

您的代码的问题在于Set Table = ...。将下面的设置表行与您的进行比较。我在Excel 2007中测试了这个过程,它可以工作!

Sub Selenium_FindElementByClass_Compound()
    Dim driver As New WebDriver
    Dim myUrl As String
    Dim Table As Selenium.WebElement
       
    ' Set URL
    myUrl = "https://portalseven.com/lottery/southafrica_powerball_winning_numbers.jsp?viewType=2&timeRange=3"
    
    ' Open chrome
    driver.Start "Chrome"
    
    ' Navigate to Url
    driver.Get myUrl
    Application.Wait Now + TimeValue("00:00:5")
    
    ' Find table
    Set Table = driver.FindElementByXPath("//*[@class='table table-bordered table-condensed table-striped text-center table-hover']")
    
    ' Copy table to Excel
    Table.AsTable.ToExcel ThisWorkbook.Worksheets.Add.Range("A1")
End Sub
4

1 回答 1

0

如果您正在寻找所有复合类,请选择此

Dim Table As Selenium.WebElement
Set Table = driver.FindElementByXPath("//*[@class='table table-bordered table-condensed table- striped text-center table-hover']")

如果您正在寻找复合类的一部分,您也可以使用

Dim FindBy As New Selenium.By
If Not driver.IsElementPresent(FindBy.Class("table-condensed"), 3000) Then
    driver.Quit
    Exit Sub
Else
    ' do something ...
    Set Table = driver.FindElement(FindBy.Class("table-condensed"))
End If

或者

Dim FindBy As New Selenium.By
If Not driver.IsElementPresent(FindBy.Css(".table-bordered"), 3000) Then
    driver.Quit
    Exit Sub
Else
    ' do something ...
    Set Table = driver.FindElement(FindBy.Css(".table-bordered"))
End If

您的代码的问题在于Set Table = ...。将下面的设置表行与您的进行比较。我在Excel 2007中测试了这个过程,它可以工作!

Sub Selenium_FindElementByClass_Compound()
    Dim driver As New WebDriver
    Dim myUrl As String
    Dim Table As Selenium.WebElement
       
    ' Set URL
    myUrl = "https://portalseven.com/lottery/southafrica_powerball_winning_numbers.jsp?viewType=2&timeRange=3"
    
    ' Open chrome
    driver.Start "Chrome"
    
    ' Navigate to Url
    driver.Get myUrl
    Application.Wait Now + TimeValue("00:00:5")
    
    ' Find table
    Set Table = driver.FindElementByXPath("//*[@class='table table-bordered table-condensed table-striped text-center table-hover']")
    
    ' Copy table to Excel
    Table.AsTable.ToExcel ThisWorkbook.Worksheets.Add.Range("A1")
End Sub
于 2021-12-19T18:47:47.430 回答