Excel VBA结合Selenium循环提取网页表格重复取首表如何解决
问题原因
你的代码核心问题是在循环执行前就固定绑定了第一个id="rank_table"的表格对象到tbl变量,循环过程中没有切换到后续匹配到的表格,因此重复输出第一个表格的次数和表格总数一致。
修正后的代码
Dim bot As New ChromeDriver, tbls As Selenium.WebElements, tbl As Selenium.TableElement, LRow As Long, i As Long Const sURL As String = "https://www.racingandsports.com/form-guide/thoroughbred/australia/sale/2021-10-06/race-tips" With bot .Get sURL ' 先获取所有id为rank_table的元素集合 Set tbls = .FindElementsById("rank_table") For i = 1 To tbls.Count ' 每次循环绑定当前遍历到的表格 Set tbl = tbls(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
核心修改点
- 先通过
FindElementsById获取所有符合条件的表格元素集合,存储到tbls变量中 - 循环过程中每次取当前索引对应的
tbls(i)元素转为Table对象,再执行写入操作,保证每次处理的都是不同的表格 - 去掉了重复的
FindElementsById计数调用,直接用集合的Count属性获取表格总数,性能更优
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

