У меня есть следующий код, который открывает страницу IE, и заполняет поля значением «караван». Однако мне нужно только первое поле для заполнения «караваном». Мне нужен второй, который будет заполнен, например, «2016». У меня были проблемы с этой задачей, потому что я не могу однозначно идентифицировать каждый элемент во входном теге (к которому принадлежат все поля).Исходный код IE-кода для моего скребка VBA
Вот мой код:
Sub Quote()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate ("https://insurance.qbe.com.au/portal/caravan/form/estimate")
ie.Visible = True
Do
DoEvents
Loop Until ie.readystate = 4
Application.Wait (Now + TimeValue("00:00:03"))
Do
DoEvents
Loop Until ie.readystate = 4
Set inputCollection = ie.document.getElementsByTagName("input")
For Each inputElement In inputCollection
inputElement.Value = "Caravan"
Next inputElement
Loop
End Sub
Так он принимает каждый «inputElement», который расположен в пределах «входной» метки, и, где это возможно, это делает отображаемое значение соответствующего поля в в том, что из «Каравана» ,
Для того, чтобы проиллюстрировать, почему у меня возникают трудности в однозначной идентификации каждого поля здесь является источником первых двух полей (первый один для типа каравана, второй один для каравана год из-производства):
Сначала один
Второй один
Итак, у меня нет идентификатора. И оба находятся в теге «input», и оба имеют одинаковое имя класса. Поэтому я не могу получить элемент-by-id или get-elements-by-classname. Я попытался получить элементы по имени класса по-разному, и он просто ничего не делает (ошибка не возникает, и веб-страница не затрагивается).
Единственный способ, которым я смог заполнить поле, - это использовать код, который у меня выше. Но, опять же, он меняет все поля. Я полагаю, что единственное, что я действительно могу использовать, чтобы заставить мой код рассказать обо всех остальных, - это элемент-заполнитель каждого из них.
Но как достичь этого, видя, как вы не можете «получить элемент по заполнителем»
//
Я так старался, чтобы подтвердить, что нет никакого способа, чтобы использовать имя класса, со следующим изменением кода :
Set inputCollection = ie.document.getElementsByTagName("input")
For Each inputElement In inputCollection
If ie.document.getElementsByClassName.Value = "ui-select-search ui-select-toggle ng-pristine ng-valid ng-touched" Then inputElement.Value = "Caravan"
Я искал в Интернете, но просто не могу найти ничего, что мне нужно - любые предложения о том, что искать? Я искал такого возмутительного, как «get element by placeholder vba», чтобы «управлять веб-сайтами с помощью vba» на «vba для управления исходным кодом, который не имеет id» для «vba, когда имена классов и теги идентичны» - я нахожусь в потеря на этом – chris