Невозможно извлечь внутренний текст для значения заголовка Span HTML, используя VBA - PullRequest
0 голосов
/ 28 января 2020

Мне не удается извлечь внутренний текст из «заголовка диапазона» (значение «17L2002131 / Тип устройства для Electri c Смарт-метры / Управляемые веб-службы DCCI / Ожидание ") атрибута IE ссылка на сайт . Принимая состояние, например, PENDING для извлеченного внутреннего текста I, и затем вставьте его в ячейку входного листа Excel, где остальные данные для выполнения теста будут сведены в таблицу.

В настоящее время код не может найти атрибут "Title" = "Go To Device" и переходит к строке: Worksheets ("Sheet2"). Диапазон ("D5") = "Активность не найдена2" вместо перехода в первый блок If Else.

Ниже приведен мой код VBA. Не могли бы вы помочь мне найти, где я иду не так.

   Set objSubCollec = objCollection(0).contentWindow.document.getElementById("tabPage")
   Set objElement = objSubCollec.contentWindow.document
   Set elm = objElement.querySelectorAll("a.pseudoLink")
   Set elm = objElement.getElementsByTagName("span")

     For Each e In elm
             If e.getAttribute("title") = "Go To Device" Then
                 If e.innerText Like "*Commissioned*" Then
                 Worksheets("Sheet2").Range("D5") = "Commissioned"

                 ElseIf e.innerText Like "*Pending*" Then
                 Worksheets("Sheet2").Range("D5") = "Pending"

                 Else
                 Worksheets("Sheet2").Range("D5") = "Active"
                 End If
             Else
                 Worksheets("Sheet2").Range("D5") = "No Activity found2"
        Exit For
      End If
   Next

Фрагмент HTML страницы:

image

1 Ответ

1 голос
/ 28 января 2020

Если вы сделаете Set elm = objElement.getElementsByTagName("span"), тогда elm будет содержать все span теги, которые существуют в вашем коде.

Таким образом, For Each e In elm будет проходить через них oop, и если он найдет один span без title="Go To Device", ваша ячейка D5 покажет No Activity found2 и немедленно выйдет из подчиненного элемента. Таким образом, даже если в коде HTML где-то до или позже будет <span title="Go To Device">, если существует хотя бы один span без title="Go To Device", ваша ячейка всегда вернет No Activity found2.

Так что вы должны введите "No Activity found2" в ячейку до , когда вы начнете искать title="Go To Device" (по умолчанию), если он не был найден, он останется по умолчанию "No Activity found2", в противном случае он будет перезаписан Commissioned , Pending или Active:

Set objSubCollec = objCollection(0).contentWindow.document.getElementById("tabPage")
Set objElement = objSubCollec.contentWindow.document
Set elm = objElement.querySelectorAll("a.pseudoLink") 'remove this it does nothing because elm gets set in the next line.
Set elm = objElement.getElementsByTagName("span") 'now elm contains ALL span tags

'set "No Activity found2" as default …
Worksheets("Sheet2").Range("D5") = "No Activity found2"

'… and overwrite it with Commissioned/Pending/Active only if that is found.
For Each e In elm
    If e.getAttribute("title") = "Go To Device" Then
        If e.innerText Like "*Commissioned*" Then
             Worksheets("Sheet2").Range("D5") = "Commissioned"
        ElseIf e.innerText Like "*Pending*" Then
             Worksheets("Sheet2").Range("D5") = "Pending"
        Else
             Worksheets("Sheet2").Range("D5") = "Active"
        End If
    End If
Next e

Обратите внимание, что если имеется более одного <span title="Go To Device">, тогда только последний в коде будет результатом в D5, а все остальные, прежде чем будут перезаписаны этим последним результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...