Я пишу макрос, который вводит данные в онлайн-калькулятор и получаю вычисленные результаты

Ссылка: https://www.icao.int/environmental-protection/ CarbonOffset / Pages / default.aspx

Пытаюсь заполнить на сайте значения «из города / аэропорта».

Вот мой код:

Sub get_CO2()
 Dim ie As Object
  Set ie = New InternetExplorerMedium
  ie.Navigate "https://applications.icao.int/icec"
  Do While ie.ReadyState <> 4: DoEvents: Loop
  ie.Visible = True
  With ie.Document
      .getElementById("passengerNo").Value = 7
      .getElementById("select1").selectedIndex = 1
      .getElementById("select2").selectedIndex = 1
      ' .getElementByName("frm1").Value = "XXX"
      ' .getElementByName("to1").Value = "XXX"
      .getElementById("computeByInput").Click
   End With
End Sub 

Это не работает. Он показывает, что «объект не поддерживает это свойство или метод». Как я могу заполнить такие типы? Какую функцию я могу использовать? Если код аэропорта неизвестен, можно ли ввести название страны и просто выбрать первый вариант?

2
noel.H 9 Янв 2019 в 12:38

2 ответа

Лучший ответ

Я понял, как это сделать с помощью vba. РЕДАКТИРОВАТЬ: запрошен полный код

iedoc.getElementsByName("frm1")(0).innerText = "somecountry"            ' enter string of country
Set li_arr = iedoc.getElementById("ui-id-1").getElementsByTagName("li")
Do While li_arr.Length = 0: DoEvents: Loop     ' wait for the drop down menu to come up
li_arr(0).Click                                ' now click the first option
1
noel.H 25 Янв 2019 в 06:52

При использовании браузера я бы выбрал автоматизацию Selenium basic, поскольку легко запускать события, связанные с полями ввода. Обратите внимание: я использую URL-адрес src iframe напрямую, чтобы избежать необходимости перемещаться по iframe, содержащему форму. После установки selenium вам необходимо установить последнюю версию Chrome и Chromedriver с помощью chromedriver.exe в той же папке, что и исполняемые файлы selenium. Кроме того, перейдите в vbe> инструменты> ссылки и добавьте ссылку на библиотеку типов селена.

Я также думаю, что можно выполнить серию запросов POST xmlhttp при условии, что вы можете захватить и передать правильные файлы cookie.

Строки в коде ниже

.FindElementByCss("#ui-id-1 li.ui-menu-item")

А также

.FindElementByCss("#ui-id-2 li.ui-menu-item")

Выберите первый элемент списка в раскрывающемся списке.

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

Option Explicit
Public Sub GetInfo()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const Url = "https://applications.icao.int/icec"
    With d
        .Start "Chrome"
        .get Url
        .FindElementByCss("[name=frm1]").SendKeys "AAD"
        .FindElementByCss("#ui-id-1 li.ui-menu-item").Click
        .FindElementByCss("[name=to1]").SendKeys "MGQ"
        .FindElementByCss("#ui-id-2 li.ui-menu-item").Click
        .FindElementById("computeByInput").Click

        Stop   'delete me later
        .Quit
    End With
End Sub
0
QHarr 9 Янв 2019 в 11:32