首页 > 解决方案 > 使用 VBA 和 selenium 抓取时从部分 id 中获取全部价值

问题描述

我正在(试图)从一个有很多

<div id="CustID_1234567"[...]>
    <div class="logged">2019-09-27</div>
</div>
<div id="CustID_2345678"[...]>
    <div class="logged">2019-09-26</div>
</div>

我正在尝试将所有客户 ID 收集到一个数组中以进行进一步处理,但我很难找到使用 selenium 获取完整 ID 的正确代码。

我在循环代码时尝试了 FindElementsByXPath 的不同变体,但我不知道如何获取 ID 文本

    Customers(a)=bot.FindElementsByXPath("//*[contains(@id, 'CustID_')]").Item(a).ID
    Customers(a)=bot.FindElementsByXPath("//*[contains(@id, 'CustID_')]").Item(a).text

第一个(.id)以错误结尾,但最后一个(.text)得到文本(duh),“2019-09-27”和“2019-09-26”,所以我想我不是那么远离真正的解决方案。

请问有什么建议吗?

标签: excelvbaselenium-webdriverweb-scraping

解决方案


有一种更快的方法(比 xpath 更快),使用 css 选择器使用正确的语法添加到数组。这也更准确,因为它匹配开头而不是包含。

Dim elem As Object, elems As Object
Set elems = bot.FindElementsByCss("[id^=CustID_]")
For each elem in elems
    Debug.Print elem.Attribute("id")
Next

存储在数组中

Dim elem As WebElement, elems As WebElements, i As Long, arr()
Set elems = bot.FindElementsByCss("[id^=CustID_]")
ReDim arr(1 To elems.Count)

For Each elem In elems
    i = i + 1
    arr(i) = elem.Attribute("id")
Next

推荐阅读