VBA не может найти ElementById при запуске. Элемент существует при проверке, но не при ссылке на него VBA

Я пытаюсь открыть веб-страницу VBA, ввести пароль и нажать «Отправить». Методы, которые работали для меня в прошлом, похоже, не работают.

Я пробовал использовать .FindElementById, используя как New InternetExplorerMedium, так и Selenium, а также пробовал Xpath с селеном. Все они не могут найти элемент на странице. Во время устранения неполадок я заметил, что если я попытаюсь прокрутить коллекцию элементов с тегом «вход», коллекция останется пустой при использовании .FindElementsByTag("input"). Это меня очень смутило, поэтому я заставил VBA открыть веб-страницу и распечатать outerHTML. Это напечатано:

HTML:

<FRAME id=top noResize marginHeight=10 src = "top.html" frameBorder=0 name=top marginWidth=10 scrolling=no>
<FRAME id=Login noResize marginHeight=0 src = "login.html" frameBorder=0 name=Login marginWidth=15 scrolling=no>
<FRAME id=bottom noResize marginHeight=10 src = "bottom.html" frameBorder=0 name=bottom marginWidth=10 scrolling=no>
<NOFRAMES></NOFRAMES>

Это полностью отличается от того, что я вижу, когда вручную проверяю поле пароля, которое пытаюсь заполнить; Я понимаю:

<input type = "password" size = "15" id = "password" name = "pswd" maxlength = "33">

но это не видно VBA при загрузке страницы. Что мне не хватает? Это мой первый вопрос, заданный в StackOverflow, поэтому, если мой формат неверен, я извиняюсь.

Обратите внимание, что элементы <frame> и <noframes> устарели уже несколько лет.

Rob 27.07.2019 04:31

с селеном вы пробовали switchTo .FindElementById("Login"), чтобы перейти во фрейм входа?

QHarr 27.07.2019 04:41

@QHarr, это сработало! Я использовал switchTo .FindElementById("Login") , и как только я переключился на фрейм, сработал FindElementById("password"). Отмечать сообщение как решенное?

user11843841 29.07.2019 17:45

Я опубликую ответ, который вы можете принять

QHarr 29.07.2019 18:25

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

user11843841 29.07.2019 18:37
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
5
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

.SwitchToFrame .FindElementById("Login") 

Другие вопросы по теме