У меня проблемы с получением Excel VBA (Office 2016) для управления IE (версия 11). Мне нужно ввести информацию в несколько полей в форме и нажать на несколько переключателей. Я идентифицировал идентификаторы объектов для всех полей, которые мне нужно изменить. Мой код скопирован / изменен из зрелого кода, который я написал несколько лет назад, чтобы делать подобные вещи на другом веб-сайте. Хотя он продолжает работать на другом сайте сегодня, он не работает здесь. К сожалению, это частный сайт, поэтому я не могу поделиться ссылкой, но вот часть моего кода и часть кода веб-страницы:
Sample of my code:
Dim IE As Object, objShell As Object, objCollection As Object
' Take control of the webpage:
' Get the page url
URL = "---------"
' Find the correct instance of IE
marker = 0
Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For X = 0 To (IE_count - 1)
On Error Resume Next
my_title = objShell.Windows(X).Document.Title
my_url = objShell.Windows(X).LocationURL
If IsEmpty(my_url) Then
my_url = objShell.Windows(X).Document.Location
End If
If my_url Like Left(URL, 45) & "*" Then 'compare to find if the desired web page is already open
Set IE = objShell.Windows(X)
marker = 1
Exit For
Else
End If
Next
If marker = 0 Then
MsgBox ("Webpage not found. Please login manually.")
Exit Sub
End If
On Error GoTo -1
On Error GoTo 0
' Wait if necessary
Do Until (IE.ReadyState = 4 And Not IE.Busy)
DoEvents
Application.StatusBar = "Waiting for Internet Explorer."
Loop
Application.StatusBar = False
' Set objCollection object
Set objCollection = IE.Document.getElementByID("QSHAA5V0GH4LSAO2AI5R2M853SJ5AI")
' This is the actual ID of one of the fields I need to enter data into (see screenshot below)
' The above line gives the familiar "Runtime error 424 Object Required" error.
Снимок экрана HTML-кода для веб-страницы
Почему это работает для одного сайта, а не для другого?
Как дополнительное примечание: когда я использую
Set objCollection = IE.Document.getElementsByClassName("Class")
MsgBox objCollection.Length
иногда это приводит к тому, что один или несколько объектов собираются, но обычно приводит к нулю. Как только у меня есть объект, который мне нужен, в сборщике у меня все хорошо, но я еще не там.
Если вы увидите ошибку, которую я делаю, я был бы очень признателен, чтобы узнать об этом, так как я сейчас очень смущен.
У меня есть следующие библиотеки:
Visual Basic для приложений
Библиотека объектов Microsoft Excel 16.0
OLE Automation
Библиотека объектов Microsoft Office 16.0
Библиотека объектов Microsoft Forms 2.0
Объекты данных Microsoft ActiveX 6.1. Библиотека
Microsoft Internet Controls
Библиотека объектов Microsoft HTML
***** Вот (измененный) скриншот веб-страницы, с которой я работаю, если это вообще помогает. *****
Глядя на скриншот, я должен искать объект внутри объекта? Нужно ли мне найти родительский объект (выступающую форму на веб-странице), прежде чем я смогу найти дочерний объект (поле в форме)?