#excel #vba #selenium #web-scraping #selenium-chromedriver
Вопрос:
Я пытаюсь использовать VBA и selenium, чтобы найти элемент по его идентификатору. Несмотря на наличие правильного идентификатора элемента и правильного кода, когда я запускаю свой код, он всегда говорит, что не может найти идентификатор элемента.
Это мой код, который я использую, чтобы открыть веб-сайт, а затем выполнить поиск элемента.
MyBrowser.Start baseUrl:="https://cibc.service-now.com/change_request.do?sysparm_query=^GOTOnumber=" amp; sTicket MyBrowser.Get "/" Set SearchInput = MyBrowser.FindElementById("sys_readonly.change_request.start_date")***
и это html-код элемента, который я пытаюсь найти на странице
"input style=";;" class="form-control disabled" id="sys_readonly.change_request.start_date" value="2021-10-14 00:00:01" readonly="readonly" aria-label="Planned Start Date"
Если кто-нибудь может помочь с тем, как я могу получить значение этого элемента, я был бы очень признателен.
Комментарии:
1.Пожалуйста, проверьте в
dev tools
(Google chrome), есть ли у нас уникальная записьHTML DOM
или нет. Шаги для проверки:Press F12 in Chrome
-gt; перейдите в gt;element
раздел -gt; выполните gt;CTRL F
-gt; затем вставьте gt;id
и посмотрите,element
выделяется ли ваш желаемый1/1
соответствующий узел.2. @cruisepandey , Да, я проверил, и это уникально. для этого есть еще одно совпадение, но оно выглядит так, что я не думаю, что это повлияет на него. lt;label for=»sys_readonly.change_request.start_date» class=»url col-xs-12 col-md-1_5 col-lg-2 control-label» dir=»ltr» style=»width: 100%; text-align: left;»gt;lt;span id=»status.change_request.start_date» aria-label=»Read only — cannot be modified» data-dynamic-title=»Click to View Maintenance Calendar» mandatory=»false» oclass=»read_only» class=»read_only «gt;lt;/spangt;….
3. Элемент может скрываться за iframe, проверьте html, если он есть. Если веб-сайт общедоступен, пожалуйста, укажите действительный URL-адрес, чтобы мы могли его протестировать.
4. @Raymond Wu, он не скрыт за iframe, и страница закрыта, поэтому я не могу поделиться ссылкой.
5. @Ayman В таком случае, поскольку вы используете Selenium, а это также означает, что браузеру нужно время для загрузки контента, вы пытались задержаться на несколько секунд (или сколько бы времени это ни заняло) раньше
FindElementById
? Установите точку останова в этой строке и сделайте браузер видимым, когда код остановится, дождитесь визуального отображения этого элемента, а затем запустите строку.