VBA - Как выбрать ссылку HTML href, содержащую слово - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь выбрать только ссылку href, которая содержит «Отклонение». Текущий VBA, который я использую, выглядит следующим образом.

Sub Code_Spectrum()

Dim URL As String, UN As String, PW As String
Dim IE As Object
Dim HTMLDoc As Object
Dim objC As Object
Dim elems As Object
Dim l As Long, sel As Object, x As Long, str As String
Dim e As Object
Dim t As Integer

With IE.document

For Each e In IE.document.getelementsbytagname("a")
        If e.classname = "edit-schedules" Then
            If t < 1 Then
                t = t + 1
                GoTo Line3
            Else
                e.Click
                Exit For
            End If
        End If
Line3:
    Next e
End With

Этот код выбирает вторую ссылку href, однако ссылка не всегда является второй. Есть несколько случаев, когда есть 4 href-кода, и положение меняется, а также меняется идентификатор смены расписания. Есть ли способ нажать только ссылку, содержащую «отклонение» в ссылке?

<table width="100%" class="schedule-detail-grid" id="grid1" border="0" cellspacing="0" cellpadding="0">
<tbody>
   <tr>
   </tr>
   <tr>
      <td class="detail-cell scheduled-interval-cell whiteText sp-left-edge" id="A1">&nbsp;</td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="B1">
         UHCMAE - Only
      </td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="C1">
         Mon 7:00 AM - Mon 3:30 PM
      </td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="D1">&nbsp; 
      </td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="E1">    
         <a class="edit-schedules" href="/spectrum/operations/scheduledBreakCreateDisplay.do?method=createBreakDisplay&amp;scheduledShiftId=221749432">Break</a>
      </td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="F1">&nbsp;</td>
      <td class="detail-cell scheduled-interval-cell whiteText" id="G1">
         <a class="edit-schedules" href="/spectrum/operations/deviationCreateDisplay.do?method=createNewDeviation&amp;scheduledShiftId=221749432">Deviation</a>
      </td>
   </tr>

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете попробовать

ie.document.querySelector("[href*=deviation]").Click

Ответ выше зависит от того, присутствует ли отклонение только в атрибуте href для элемента (ов) с внутренним текстом deviation

Это основано на комбинации атрибута = значения CSS, где он ищет первый элемент с атрибутом href, имеющим значение, содержащее (*) deviation.

Вы могли бы сделать более конкретным, добавив удлинение строки для соответствия в href до /spectrum/operations/deviation:

ie.document.querySelector("[href*='/spectrum/operations/deviation']").Click

и добавление селектора класса, например

ie.document.querySelector(".edit-schedules[href*='/spectrum/operations/deviation']").Click
0 голосов
/ 06 ноября 2018

Если это единственная ссылка, содержащая это слово, просто переберите все теги a - что вы уже делаете - и получите свойство innerText.

Dim aTag As Object

For Each aTag In ie.document.getelementsbytagname("a")
    If aTag.innertext = "Deviation" Then
        aTag.Click
        Exit For
    End If
Next aTag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...