Как заполнить html поля автозаполнения с помощью vba? - PullRequest
0 голосов
/ 09 января 2019

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

Ссылка: 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 ]

0 голосов
/ 10 января 2019

Я понял, как это сделать с помощью 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
0 голосов
/ 09 января 2019

При использовании браузера я бы пошел с Selenium basic автоматизацией, поскольку легко вызывать события, связанные с полями ввода. Обратите внимание, что я использую iframe src url direct, чтобы избежать необходимости перемещаться по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...