Запрашивать, когда elementId не найден - PullRequest
0 голосов
/ 11 июля 2020

У меня есть код VBA, который перемещается по веб-страницам, нажимая elementId.

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

Моя проблема в том, что ошибки нет запрашивается, когда elementId не найден. Код продолжается до конца.

Например, код:

Ie.visible = True
Ie.navigate "www.abc.com"

Ie.document.getElementbyId("btk").click

Здесь я пытаюсь нажать на кнопку btk.

Но эта кнопка недоступна на веб-странице. Я ожидал, что мой код взломает sh, но это продолжается до конца. В коде не используется обработка ошибок.

Ответы [ 3 ]

2 голосов
/ 11 июля 2020

Насколько я понял, вы хотели бы проверить, действительно ли elementId, представляющий кнопку btk на веб-странице, существует, прежде чем вызывать событие щелчка.

Один из способов сделать это - создать объект (я назову его buttonElement) и попытаюсь установить его на кнопку с идентификатором btk (используя getElementById("btk"), если он не существует на веб-странице, объект buttonElement будет Nothing, но если он существует, объект получит ссылку на эту кнопку

Dim buttonElement As HtmlElement
Set buttonElement = Ie.document.getElementById("btk")
'
If Not (buttonElement Is Nothing) Then
    buttonElement.click
Else:
   '
   'Do something else, buttonElement with id btk not found
End If
0 голосов
/ 17 июля 2020

Спасибо @Scott Holtzman, @tdmsoares, @ Deepak-MSFT за ответ на мой запрос.

К сожалению, обновление приложения и ОС не находится под моим контролем, поэтому я решил использовать операторы if.

Используя оператор if, я вызвал пользовательскую ошибку, когда кнопка не была найдена, чтобы получить ошибку времени выполнения.

Когда я знаю элемент, который нужно щелкнуть, я использовал метод ниже.

Dim buttonElement As HtmlElement
Set buttonElement = Ie.document.getElementById("btk")

If Not (buttonElement Is Nothing) Then
    buttonElement.click
Else:
   Err.raise vbObjectError+515,,”The sign in button was not found"
   
End If

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

Dim htmla as mshtml.ihtmlelement
Dim htmlas as mshtml.ihtmlelementcollection

Signin= 0
For each htmla in htmlas
If htmla.getattribute(“classname”) = “hero_button" Anand htmla.innertext =”Sign in" then
signin= signin+1
Htmla.click
Exit for
Next htmla
If signin<>1 then
Err.raise vbObjectError +515,,” The sign in button was not found"
End if
```



0 голосов
/ 13 июля 2020

Я предлагаю попробовать обновить вашу Windows ОС и MS Office с помощью последних обновлений, которые могут помочь вам решить эту проблему.

Я протестировал проблему с помощью простого кода на Windows 10 ОС с MS Office 2016.

Я вижу, что он генерирует ошибку, если код не находит элемент на странице.

Протестированный код:

Sub demo()

    Dim i As Long
    Dim URL As String
    Dim IE As Object
    
    Set IE = CreateObject("InternetExplorer.Application")
     
    IE.Visible = True
    
    URL = "http://localhost/86.html"
   
    IE.Navigate URL
  
    Do While IE.ReadyState = 4: DoEvents: Loop
    Do Until IE.ReadyState = 4: DoEvents: Loop
 
    IE.document.getElementById("abc").Click
    
    Set IE = Nothing
    
End Sub

Выход:

введите описание изображения здесь

...