#vba #dom #web-scraping #getelementbyid
#vba #dom #очистка веб-страниц #getelementbyid
Вопрос:
Я пытаюсь заполнить форму на веб-странице, используя данные из Excel и макрос VBA.
IE.document.getElementById("elementName").Value = ThisWorkbook.Sheets("Table_1").Range("A2").Value
Однако веб-сайт, который я использую, не имеет статических идентификаторов для входных идентификаторов или тегов DIV. Если я просмотрю источник на веб-странице, я увижу это:
<div class="username" id="newid181619129-Username" value="">
<input class="search form-control" id="newid181619129-Username_input" type="text" />
</div>
И затем, если я обновлю веб-страницу, я получу это.
<div class="username" id="newid521236985-Username" value="">
<input class="search form-control" id="newid521236985-Username_input" type="text" />
</div>
У меня нет контроля над исходной веб-страницей. Единственное решение, которое я нашел для этого, заключалось в том, чтобы «Перечислить всех потомков <div>
этого тега, проверяя их ID
свойство с помощью Like
«. но я не могу найти DIV
тега, который использует статический идентификатор.
Есть ли какой-нибудь способ заставить getElementById
работать с динамическими идентификаторами?
Комментарии:
1. Конечно, это так. Попробуйте использовать
.querySelector()
для использования динамических идентификаторов. Например, эта часть-Username
и-Username_input
остаются неизменными, которые вы можете использовать для выполнения своей работы.2. Это выглядит многообещающе, но я не уверен, каким именно должен быть синтаксис. Я получил эту работу на тестовом сайте
IE.document.querySelector("#email").Value = ThisWorkbook.Sheets("Table_1").Range("A2").Value
, но когда я попытался выполнить частичное совпадение (на основе другой страницы StackOverflow, которую я нашел), это не сработало.IE.document.querySelector("id$='mail'").Value = ThisWorkbook.Sheets("Table_1").Range("A2").Value
3. Мне не хватало скобок,
IE.document.querySelector("[id$='mail']").Value = ThisWorkbook.Sheets("Table_1").Range("A2").Value
4. Вы обнаружили, что он наконец работает?
5. Да, я сделал, см. Мой последний комментарий, я смог заставить его работать. Спасибо!