【问题标题】:VBA IE automation through excel - Get drop down list attribute values通过 excel 实现 VBA IE 自动化 - 获取下拉列表属性值
【发布时间】:2018-02-26 14:35:45
【问题描述】:

我正在尝试将下拉值写入 excel,但是我遇到了一些困难。

HTML 代码如下:

<div class="select__box" id="wrapBox">
   <div class="option" name="US" data-id="United States">
      <div class="option__icon"><span class="flag-icon flag-icon-3x flag-icon-us flag-icon-squared option__flag"></span></div>
      <div class="option__title">United States</div>
   </div>
   <div class="option" name="CA" data-id="Canada">
      <div class="option__icon"><span class="flag-icon flag-icon-3x flag-icon-ca flag-icon-squared option__flag"></span></div>
      <div class="option__title">Canada</div>
   </div>
   <div class="option" name="GB" data-id="United Kingdom">
      <div class="option__icon"><span class="flag-icon flag-icon-3x flag-icon-gb flag-icon-squared option__flag"></span></div>
      <div class="option__title">United Kingdom</div>
   </div>
   <div class="option" name="DO" data-id="Dominican Republic">
      <div class="option__icon"><span class="flag-icon flag-icon-3x flag-icon-do flag-icon-squared option__flag"></span></div>
      <div class="option__title">Dominican Republic</div>
   </div>
   <div class="option" name="CN" data-id="China">
      <div class="option__icon"><span class="flag-icon flag-icon-3x flag-icon-cn flag-icon-squared option__flag"></span></div>
      <div class="option__title">China</div>
   </div>
</div>

首先我需要获取国家/地区名称,我可以使用代码来做到这一点

x = objIE.document.getElementsByClassName("option").Length
    nextEmptyRow = 1

    For i = 0 To x - 1
    cnt = objIE.document.getElementsByClassName("option")(i).innerText
    ActiveWorkbook.Sheets("Sheet1").Range("A" & nextEmptyRow).Value = cnt
    nextEmptyRow = nextEmptyRow + 1
    Next i

然后我想获取国家代码(US、CA、GB、DO、CN)

我正在尝试使用类似的代码,但它给了我一个错误,我无法找出可能是什么问题。

    For i = 0 To x - 1
    cnt2 = objIE.document.getElementByClassName("option")(i).getAttribute("name").innerText
    ActiveWorkbook.Sheets("Sheet1").Range("B" & nextEmptyRow2).Value = cnt2
    nextEmptyRow2 = nextEmptyRow2 + 1
    Next i

【问题讨论】:

    标签: vba excel ie-automation


    【解决方案1】:

    解析字符串是一个选项吗?

    这里我将 HTML 存储在 Activesheet 的单元格 A1 中用于测试目的:

    Option Explicit
    
    Sub test()
    
        Dim parseString As String
    
        parseString = ActiveSheet.Range("A1")
    
        Dim codesArray() As String
    
        codesArray = Split(parseString, "name=""")
    
        Dim i As Long
    
        For i = 1 To UBound(codesArray)
            Debug.Print Left$(codesArray(i), InStr(1, codesArray(i), " ") - 2)
        Next i
    
    End Sub
    

    工作表中的 HTML(用于测试)

    【讨论】:

      【解决方案2】:

      感谢您的建议,QHarr,但我找到了一个更简单的解决方案。

      显然我需要更具体地指出 HTML 代码中的行,我缺少 getElementById("wrapBox").innerText.Value 是不必要的。

       For i = 0 To x - 1
          cnt = objIE.document.getElementsByClassName("option")(i).innerText
          ActiveWorkbook.Sheets("Sheet1").Range("A" & nextEmptyRow).Value = cnt
          cnt2 = objIE.document.getElementById("wrapBox").getElementsByClassName("option")(i).getAttribute("name")
          ActiveWorkbook.Sheets("Sheet1").Range("B" & nextEmptyRow).Value = cnt2
          nextEmptyRow = nextEmptyRow + 1
          Next i
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-06
        • 2020-11-27
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 2021-03-28
        相关资源
        最近更新 更多