Выберите вариант из раскрывающегося списка в IE и вызовите функцию - PullRequest
2 голосов
/ 08 мая 2020

Итак, я новичок в IE автоматизации для VBA. Я постараюсь быть очень конкретным c по своему вопросу. Недавно я пытался войти на сайт, а затем выбрать месяц из раскрывающегося списка. Я могу выбрать вариант из раскрывающегося списка. Однако, когда я нажимаю кнопку поиска, результаты отображаются не для значений, которые я выбрал с помощью VBA, а для значений, которые изначально были на веб-странице. Обычно, если кто-то переходит на веб-сайт, он должен щелкнуть раскрывающийся список и выбрать соответствующий период, а затем нажать кнопку поиска. Я также пробовал FireEvent «onchange», но это, похоже, не имело никакого эффекта. Я прикрепляю соответствующую часть VBA, а также соответствующий HTML.

Пожалуйста, укажите, как я могу выбрать период.

Код VBA:

Set e = IE.document.getElementsByName("fin")(0)
 e.Focus
 e.selectedIndex = 1
 e.FireEvent ("onchange")

HTML:

<select name="fin" class="form-control ng-pristine ng-not-empty ng-valid ng-valid-required ng-touched" 
data-ng-model="finyr" data-ng-options="item.year for item in years"
value="item.year" data-ng-change="hidedata()" required="">
<option label="2019-20" value="object:143" selected="selected">2019-20</option>
<option label="2018-19" value="object:144">2018-19</option>
<option label="2017-18" value="object:145">2017-18</option>
<option label="2020-21" value="object:146">2020-21</option></select>

1 Ответ

2 голосов
/ 09 мая 2020

Может быть два пути. Во-первых, вы можете установить необходимые параметры в URL-адресе. Тогда вам не нужен шаг, который вы хотите сделать здесь. Это решение работает, если страница использует Get для связи с сервером. Если он использует Post, вы должны выполнить требуемый шаг.

Вы можете проверить, работает ли он с помощью параметров URL, выполнив все необходимые шаги вручную. После этого посмотрите URL-адрес, который вы найдете в браузере. Если есть список параметров, он начинается с вопросительного знака (?). Все следующие параметры начинаются с амперсанда (&).

Если вы должны сделать это с помощью кода, попробуйте следующее:

Sub SelectFromDropdown()

  Dim url As String
  Dim browser As Object
  Dim nodeSelect As Object

  url = "Your url here"

  'Initialize Internet Explorer, set visibility,
  'call URL and wait until page is fully loaded
  Set browser = CreateObject("internetexplorer.application")
  browser.Visible = True
  browser.navigate url
  Do Until browser.readyState = 4: DoEvents: Loop

  'Get the dropdown and select the wanted entry by index
  'Indexes beginn with 0
  '(Code lines from your question)
  Set nodeSelect = browser.document.getElementsByName("fin")(0)
  nodeSelect.selectedIndex = 1

  'It is likely that the change to the page must be communicated
  'via an HTML event. This is probably the change event
  'FireEvent doesn't work on most pages
   Call TriggerEvent(browser.document, nodeSelect, "change")
End Sub

Эта процедура для запуска события html:

Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)

  Dim theEvent As Object

  htmlElementWithEvent.Focus
  Set theEvent = htmlDocument.createEvent("HTMLEvents")
  theEvent.initEvent eventType, True, False
  htmlElementWithEvent.dispatchEvent theEvent
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...