如何在 chrome 中用 VBA + SELENIUM 计算 class 中的元素?
How to count the elements from a class with VBA + SELENIUM in chrome?
我想计算元素的数量,目的是获取所有元素的名称并存储在一个数组中。
名称已突出显示in this image
名称存储在“js-list list-wrapper”中as shown in image
我的代码:
Public Sub seleniumtutorial()
Dim bot As New SeleniumWrapper.WebDriver
Dim a As WebElement
Dim b As WebElement
Dim x() As Integer
bot.Start "chrome", "https://trello.com/login"
bot.get "/"
bot.Type "name=user", "biaverly@id.uff.br"
bot.Type "name=password", "xxxxxxx"
bot.clickAndWait "id=login"
bot.findElementByLinkText("Gestão de Pessoas").Click
我试过了:
Set a = bot.findElementsByClassName("board-canvas", 5).Count
并通过 xpath 和 id 查找元素。
findElementsByClassName
绝对是你想要的,但你的用法看起来不对。我很确定 .count
returns 很长,而不是网络元素或网络元素数组。我也很确定它不需要第二个参数,你想用 , 5
完成什么,你的错误消息是什么?
获取 class
中元素的数量
Dim classCount as Long
classCount = bot.findElementsByClassName("board-canvas").Count
指的是 class
中的最后一个元素
bot.findElementsByClassName("board-canvas").Item(classCount)
那个class
中最后一个元素的内容
bot.findElementsByClassName("board-canvas").Item(classCount).Text
现在,不幸的是,这是我可能偏离路线的地方,因为我没有我的作品可供参考,但我相信你可以像这样检索集合并循环遍历 class
Dim classTxt as String
Set a = bot.findElementsByClassName("board-canvas")
For each b in a
classTxt = b.Text
Next b
警告:以下是基本硒 vba。这使用了 Selenium 类型库,并且基于来自 here. The syntax you are using makes me think the question potentially is wrongly tagged as the syntax, for the most part, is for selenium IDE 的@florentbr 的开发。不确定您是否正在转换脚本?我不记得 VBA 是 IDE 支持的语言,但是......
Trello headers 将是 class 名称 list-header-name
。
我会用得更快.FindElementsByCss
所以,
bot.FindElementsByCss(".list-header-name")
“.”在 list-header-name
之前是一个 css class selector。现代浏览器为此进行了优化。
,5
是 minimum
参数的值;由于您没有使用命名参数,因此匹配将是位置性的。第三个参数是 timeout
。 minimum
和 timeout
都是可选的。
现在,当使用 Set
关键字时,这是为了分配给 object 变量:
Dim titles As Object
Set titles = bot.FindElementsByCss(".list-header-name")
您没有尝试同时检索 属性。正在尝试:
Set titles = bot.FindElementsByCss(".list-header-name").Count
应该会导致类型不匹配错误。
您可以使用
分别从 collection 中获取 webElement 计数
Dim numberOfWebElements As Long
numberOfWebElements = titles.Count
对于 trello,您可以使用 ID 进行登录。我会使用那些和 SendKeys 方法
大纲示例:
Option Explicit
Public Sub SeleniumTutorial()
Dim bot As WebDriver, titles As Object, i As Long
Dim numberOfWebElements As Long, names(), t As Date
Const MAX_WAIT_SEC As Long = 10
Set bot = New ChromeDriver
With bot
.get "https://trello.com/login"
.Window.Maximize
.FindElementById("user").SendKeys "userName"
.FindElementById("password").SendKeys "passWord"
.FindElementById("login").Click
.FindElementByLinkText("Gestão de Pessoas", timeout:=5000).Click '< named argument
t = Timer
Do
On Error Resume Next
Set titles = bot.FindElementsByCss(".list-header-name")
numberOfWebElements = titles.Count
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While numberOfWebElements = 0
If numberOfWebElements = 0 Then Exit Sub
ReDim names(1 To numberOfWebElements)
For i = 1 To titles.Count
names(i) = titles.item(i).Text
Next
Stop 'delete me later
End With
End Sub
我从 class "js-list list-wrapper" 中的一个随机元素得到了 xpath,它是:
//*[@id="board"]/div[5].
所以我用
解决了它
Dim titles As Object
Set titles =
bot.findElementsByXPath("//[@id=""board""]/div")
Dim ab As Long
ab = titles.Count
MsgBox ab
我想计算元素的数量,目的是获取所有元素的名称并存储在一个数组中。
名称已突出显示in this image
名称存储在“js-list list-wrapper”中as shown in image
我的代码:
Public Sub seleniumtutorial()
Dim bot As New SeleniumWrapper.WebDriver
Dim a As WebElement
Dim b As WebElement
Dim x() As Integer
bot.Start "chrome", "https://trello.com/login"
bot.get "/"
bot.Type "name=user", "biaverly@id.uff.br"
bot.Type "name=password", "xxxxxxx"
bot.clickAndWait "id=login"
bot.findElementByLinkText("Gestão de Pessoas").Click
我试过了:
Set a = bot.findElementsByClassName("board-canvas", 5).Count
并通过 xpath 和 id 查找元素。
findElementsByClassName
绝对是你想要的,但你的用法看起来不对。我很确定 .count
returns 很长,而不是网络元素或网络元素数组。我也很确定它不需要第二个参数,你想用 , 5
完成什么,你的错误消息是什么?
获取 class
中元素的数量Dim classCount as Long
classCount = bot.findElementsByClassName("board-canvas").Count
指的是 class
中的最后一个元素bot.findElementsByClassName("board-canvas").Item(classCount)
那个class
中最后一个元素的内容bot.findElementsByClassName("board-canvas").Item(classCount).Text
现在,不幸的是,这是我可能偏离路线的地方,因为我没有我的作品可供参考,但我相信你可以像这样检索集合并循环遍历 class
Dim classTxt as String
Set a = bot.findElementsByClassName("board-canvas")
For each b in a
classTxt = b.Text
Next b
警告:以下是基本硒 vba。这使用了 Selenium 类型库,并且基于来自 here. The syntax you are using makes me think the question potentially is wrongly tagged as the syntax, for the most part, is for selenium IDE 的@florentbr 的开发。不确定您是否正在转换脚本?我不记得 VBA 是 IDE 支持的语言,但是......
Trello headers 将是 class 名称 list-header-name
。
我会用得更快.FindElementsByCss
所以,
bot.FindElementsByCss(".list-header-name")
“.”在 list-header-name
之前是一个 css class selector。现代浏览器为此进行了优化。
,5
是 minimum
参数的值;由于您没有使用命名参数,因此匹配将是位置性的。第三个参数是 timeout
。 minimum
和 timeout
都是可选的。
现在,当使用 Set
关键字时,这是为了分配给 object 变量:
Dim titles As Object
Set titles = bot.FindElementsByCss(".list-header-name")
您没有尝试同时检索 属性。正在尝试:
Set titles = bot.FindElementsByCss(".list-header-name").Count
应该会导致类型不匹配错误。
您可以使用
分别从 collection 中获取 webElement 计数Dim numberOfWebElements As Long
numberOfWebElements = titles.Count
对于 trello,您可以使用 ID 进行登录。我会使用那些和 SendKeys 方法
大纲示例:
Option Explicit
Public Sub SeleniumTutorial()
Dim bot As WebDriver, titles As Object, i As Long
Dim numberOfWebElements As Long, names(), t As Date
Const MAX_WAIT_SEC As Long = 10
Set bot = New ChromeDriver
With bot
.get "https://trello.com/login"
.Window.Maximize
.FindElementById("user").SendKeys "userName"
.FindElementById("password").SendKeys "passWord"
.FindElementById("login").Click
.FindElementByLinkText("Gestão de Pessoas", timeout:=5000).Click '< named argument
t = Timer
Do
On Error Resume Next
Set titles = bot.FindElementsByCss(".list-header-name")
numberOfWebElements = titles.Count
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While numberOfWebElements = 0
If numberOfWebElements = 0 Then Exit Sub
ReDim names(1 To numberOfWebElements)
For i = 1 To titles.Count
names(i) = titles.item(i).Text
Next
Stop 'delete me later
End With
End Sub
我从 class "js-list list-wrapper" 中的一个随机元素得到了 xpath,它是: //*[@id="board"]/div[5].
所以我用
解决了它 Dim titles As Object
Set titles =
bot.findElementsByXPath("//[@id=""board""]/div")
Dim ab As Long
ab = titles.Count
MsgBox ab