Я получаю ошибку времени выполнения "438" (объект не поддерживает это свойство или метод) при попытке щелкнуть по кнопке с помощью VBA на веб-сайте PHP, и я занимаюсь поиском в течение последних нескольких часов и не могу найти путь вокруг него.
Этот код ниже делает все, в чем я нуждаюсь, но не могу найти, как нажать кнопку без ее провала, попробовал следующее:
IE.Document.getElementsByName("Calculate").Click
IE.Document.getElementsByID
IE.Document.getElementsByClassName
и т.д. все терпят неудачу.
Код для кнопки, как я вижу, приведен ниже:
<button onclick="calculate();" class="btn btn-primary">Calculate</button>
Поэтому при использовании ByClassName я использовал btn btn-primary и по имени я использовал Calculate. Я теряю голову сейчас, какие-то идеи? Код ниже:
ps, используя IE11, если это имеет значение.
Sub testWeb()
Dim sht As Worksheet
Dim IE As Object
Dim Item As Variant
Dim objElement As Object
Set sht = ActiveSheet
Set IE = CreateObject("InternetExplorer.Application")
'Open IE
IE.Visible = True
IE.Navigate "http://www.doogal.co.uk/DrivingDistances.php"
'Wait until site is loaded
Do While IE.ReadyState <> 4 'READYSTATE_COMPLETE
DoEvents
Loop
IE.Document.getElementById("startLocs").Value = "TEST"
IE.Document.getElementById("endLocs").Value = "TEST1"
IE.Document.getElementsByName("Calculate").Click
IE.Document.forms(1).submit
End Sub
У вас есть 2 проблемы с отправленным кодом.
Метод .getElementsByName
возвращает коллекцию элементов. Вам нужно будет выяснить, какой элемент является элементом, который вы хотите щелкнуть. Таким образом, ваш код должен выглядеть примерно так:
IE.Document.getElementsByName("Calculate").Item(5).Click
Если HTML, который вы отправили, находится с фактического сайта, то <BUTTON>
не имеет свойства name
, поэтому он не будет в коллекции элементов, возвращаемых getElementsByName
.
Возможно, вам придется исследовать другой метод поиска вашего элемента DOM. ИДК сколько кнопки на форме, и я не знаю, какой класс присваивается каждой кнопке, но, возможно, вы можете getElementsByTagName
затем цикл по каждому item
, глядя на его .class
собственности или вы могли бы getElementsByClassName
и петля через эту коллекцию, пока вы не найдете элемент кнопки .type
.