Щелчок по скрытой кнопке в HTML через VBA

#html #vba #web-scraping #attributes

#HTML #vba #очистка веб-страниц #атрибуты

Вопрос:

 <tr>
    **<td>**JB - Al Qouz**</td>**
    **<td>**
        <strong>0</strong>
        <input type="hidden" name="ingredient[inventories_attributes][][id]" id="ingredient_inventories_attributes__id" value="5564069">
      <small><span class="buyUnitValueText ">pc</span></small>
      <small><b><span id="totalStockValue_1" class="hide paddingLeft15 updateTotalStockValue"></span></b></small>
    **</td>**
    **<td>**
      <div class="align-left">
        <input type="text" name="ingredient[inventories_attributes][][reorder_level]" id="ingredient_inventories_attributes__reorder_level" value="0" class="span5 menuItemInventory reOrderValue">
        <small><span class="buyUnitValueText span7 labelText pull-right align-left">pc</span>
        </small>
      </div>
    **</td>**
    <td class="align-left">
      <input type="hidden" name="ingredient[inventories_attributes][][track_inventory]" id="track_inventory_9971" **value="true"**>
      **<div class="vCheckBox trackInventoryCheckbox active" id="9971"></div>**
 

Мне нужно изменить 2 вещи (см. Жирный шрифт), если "id=9971" через vba.

  1. Установите класс vCheckBox trackInventoryCheckbox active в класс vCheckBox trackInventoryCheckbox
  2. Установите value="true" значение value="false"

Причина в том, что я не могу нажать кнопку через VBA, и изменение кода в html, которое происходит при нажатии вручную, — это 1. amp; 2. упомянутые выше.

Пожалуйста, сообщите, ниже приведен мой код, в котором я пытался получить значение тега, tr но не смог, вторая часть была там, где я мог изменить значения.

     With ie
        .Visible = True
        .navigate (EditIngredientURL)
    
        While .Busy Or .readyState <> 4: DoEvents: Wend
        While .document.readyState <> "complete": DoEvents: Wend
    End With
    
    Set HTMLdoc = ie.document
    Set tr = HTMLdoc.getElementsByTagName("tr")
    
    For Each trObj In tr
        Set td = trObj.getElementsByTagName("td")
        For Each tdObj In td
            If InStr(tdObj.innerText, "JB - Al Qouz") Then
                Debug.Print tdObj.innerText
    
                Set CheckBox = tdObj.getElementsByTagName("class")
                For Each idnumber In CheckBox
                    Debug.Print idnumber.innerText
                    Exit For
                Next
            End If
        Next
    Next
End Sub
 

Комментарии:

1. Ответил кодом, который я пытался использовать, чтобы сначала получить значение класса в td, чтобы я мог его изменить, проблема в первую очередь: я не могу получить значение атрибута «value» в <input . Во-вторых, я не уверен, как я проанализировал <div, чтобы прочитать идентификатор, а затем изменить прикрепленный к нему класс.

2. Мне неясно, знаете ли вы этот идентификационный номер id=9971 или он неизвестен?

3. «Id = 9971» связан с «JB — Al Qouz» и известен мне с самого начала кода, я могу использовать его в качестве справочной базы для изменения 1. amp; 2. там.

4. Попробуйте HTMLdoc.getElementById("track_inventory_9971").value = "false" и HTMLdoc.getElementById("9971").className = "vCheckBox trackInventoryCheckbox"

5. Это сработало идеально! Большое спасибо, чувак.

Ответ №1:

Если идентификатор известен и у вас есть его в переменной idNo , вы можете использовать его для поиска элементов:

 idNo = "9971"

HTMLdoc.getElementById("track_inventory_" amp; idNo).value = "false"

HTMLdoc.getElementById(idNo).className = "vCheckBox trackInventoryCheckbox"