在 selenium 中通过...(."<table class = "table table-bordered table-condensed table-striped
Posted
技术标签:
【中文标题】在 selenium 中通过...(."<table class = "table table-bordered table-condensed table-striped text-center table-hover">") 查找元素【英文标题】:Find element by...(."<table class = "table table-bordered table-condensed table-striped text-center table-hover">") in selenium 【发布时间】:2022-01-21 14:39:41 【问题描述】:我正在使用 Selenium.Driver 查找应该返回网页中特定表格的 div 类元素。 虽然通过 find by tag 方法成功地抽象了整个页面,但我现在面临的挑战是,只返回页面中的表格,除了表格类被列为“复合名称”并且在 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
,我添加了micro
和目标html page
。 url
链接也已发布。
代码: enter image description here
网址链接:https://portalseven.com/lottery/southafrica_powerball_winning_numbers.jsp?viewType=2&timeRange=3
【问题讨论】:
使用元素的相关 HTML 更新问题。 感谢@DbjB 的回复,让我完成您的示例。 您希望定位的网站和特定表是什么?您展示的 html 复合类很常见 Bootstrap 并且经常在一个页面上多次使用。 我开始怀疑这个问题是基于库的。 excel 2010 是否有可能根本不支持使用复合名称? 响应 QHarr:这个复合名称只列出一次,并且是唯一包含目标表的元素。让我上传更多信息。 【参考方案1】:如果你正在寻找所有的复合类选择这个
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 = ...。将下面的 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
【讨论】:
Elio,所有示例都返回错误“32”消息。我已经怀疑库问题,即我使用的是 excel 2010,而不是当前版本。 .driver 引用似乎根本不受支持。我会上传网站和具体页面。 我已经尝试了我发布的代码并且所有示例都有效!你能分享你正在使用的网址吗?也分享整个错误消息。 这是真的,Elio,因此我认为:代码可以在 excel 2016 平台上运行,而不是在 2010 版本上运行。如果可以,您是否有机会在 2016 平台上运行此测试?让我按要求上传。 我有 Excel 2013、2016 和 Office 365。 能否在 2010 平台上测试代码,看看输出是否为正。我已经根据要求更新了问题。谢谢。以上是关于在 selenium 中通过...(."<table class = "table table-bordered table-condensed table-striped 的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中通过 C# (Selenium) 自动登录 Gmail
在 selenium python 中通过 href 查找链接
Python Selenium 无法使用 Selenium 和 Python 在#shadow-root (open) 中通过 xpath 找到元素