Как выбрать каждый параметр в раскрывающемся списке и нажать кнопку (та же проблема политики происхождения - разрешение отклонено на второй итерации) - PullRequest
0 голосов
/ 11 июня 2019

Мне нужен код, который просматривает опции в объекте

Set periodSelector = ie.document.getElementById("period")
For Each Period In periodSelector.Options
    Period.Selected = True
    Application.Wait (Now + TimeValue(waittime))
Next Period

Работает хорошо - браузер прекрасно выбирает каждый параметр. Но когда я добавляю button.click, чтобы показать данные, относящиеся к выбранной опции, во втором цикле селектора возникает ошибка «Отказано в доступе» (кажется, что он больше не может использовать команду .select).

Set periodSelector = ie.document.getElementById("period")
For Each Period In periodSelector.Options
    Period.Selected = True
    Application.Wait (Now + TimeValue(waittime))
    ie.document.getElementsByTagName("input")(17).Click
    Application.Wait (Now + TimeValue(waittime))
Next Period

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

1 Ответ

1 голос
/ 11 июня 2019

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

Dim periodSelector As Object, i As Long, optionsLength As Long
Set periodSelector = ie.document.querySelectorAll("#period option")
optionsLength = periodSelector.Length -1

For i = 0 to optionsLength
    ie.document.querySelectorAll("#period option").item(i).Selected = True
    Application.Wait Now + TimeValue(waittime)
    ie.document.getElementsByTagName("input")(17).Click
    Application.Wait Now + TimeValue(waittime)  '<== this I would replace with proper page load wait      While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...