【问题标题】:get full value from partial id when scraping using VBA and selenium使用 VBA 和 selenium 抓取时从部分 id 中获取全部价值
【发布时间】:2019-09-27 18:56:00
【问题描述】:

我正在(试图)从一个包含大量

的 Intranet 页面中抓取信息
<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”,所以我想我是与真正的解决方案相去甚远。

有什么建议吗?

【问题讨论】:

  • 你的 xpath 是正确的。它应该返回所有元素。如果您尝试获取填充 cust_id 那么您应该尝试获取 id 属性..类似这样的东西... Xpath("").item(a).getAttribute("id")
  • .attribute("id") 成功了 "bot.FindElementsByXPath("//*[contains(@id, 'CustID_')]").Item(a).attribute("id “)“ 谢谢。我可以请您将其作为答案,以便我将其标记为正确答案吗?
  • 完成。乐于助人!!!

标签: excel vba selenium-webdriver web-scraping


【解决方案1】:

从检索到的元素中获取“id”属性以获取完整值。

bot.FindElementsByXPath("//*[contains(@id, 'CustID_')]").Item(a).attribute("id")

【讨论】:

    【解决方案2】:

    有一种更快的方法(比 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
    

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多