我如何使用带有硒包装的vba从html中仅调用表格的第8个单元格?我正在尝试将这些扣押的日期打印到Excel中的单元格中。这是一个示例,其中搜索返回了3次带有3个不同日期的被扣押车辆。
查看源:https://www.autoreturn.com/indianapolis-in/find-vehicle/results
我尝试了.Findelement
的几种不同版本,例如
Sheets("VinCheck").Cells(i, "D").Value = chromeDriver.FindElementByClass("input-item").Text
,但似乎没有任何效果。这只是返回一个看似空白的值。
答案 0 :(得分:2)
您可以使用:nth-of-type
的伪类选择器来指定列号(一行中的nth td
单元格)
Option Explicit
Public Sub SearchVin()
Dim d As WebDriver, hTable As Object, ws As Worksheet, t As Date
Dim headers(), vin As String
Const MAX_WAIT_SEC As Long = 10
Set d = New ChromeDriver
Set ws = ThisWorkbook.Worksheets("Sheet1")
Const URL = "https://www.autoreturn.com/indianapolis-in/find-vehicle/"
vin = "1G4HD57287U218052"
With d
.Start "Chrome"
.get URL
.FindElementById("vin").SendKeys vin '<== vin
Application.Wait Now + TimeSerial(0, 0, 1)
.FindElementByCss("[onclick='submitVin()']").Click
t = Timer
Do
DoEvents
On Error Resume Next
Set hTable = .FindElementByCss("table") 'use tag name of results table to target table
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While hTable Is Nothing
'do something with results
Dim towDates As Object, towDate As Object
If Not hTable Is Nothing Then
Set towDates = .FindElementsByCss("table tr.results-row td:nth-of-type(9)")
For Each towDate In towDates
Debug.Print towDate.Text
Next
End If
.Quit
End With
End Sub
结果如下:
限制行
您当然可以添加另一个nth-of-type
选择器来限制检索到的行。假设您想要第2行的拖曳日期时间,
table tr:nth-of-type(2).results-row td:nth-of-type(9)
请注意,由于我也在使用类"."
选择器,因此我限制了上述选择器中返回的行以排除标题行。
使用最后一个孩子:
由于所需的列是行(最后一列)中的最后一个td
单元,因此您可以使用:last-child
伪类选择器来代替:nth-of-type
,例如
Set towDates = .FindElementsByCss("table tr.results-row td:last-child")
和
table tr:nth-of-type(2).results-row td:last-child
单个返回值与列表:
如果期望一个值,则将CSS选择器应用于
.FindElementByCss
例如
.FindElementsByCss("table tr:nth-of-type(2).results-row td:last-child")
如果期望值列表,则将CSS选择器应用于
.FindElementsByCss
例如
.FindElementsByCss("table tr.results-row td:last-child")
第一个孩子选择器:
还值得注意的是,您可以访问:first-child
选择器,例如,获取第一行结果。
写出整个表格:
如果您想写出整个表格,请参考答案here。