#vba #import-from-excel #getelementsbyclassname
#vba #импорт из excel #getelementsbyclassname
Вопрос:
Я пытаюсь получить цену с веб-сайта, используя макросы VBA. В целом следующий код работает нормально (пример):
price = html.getElementsByClassName("fpStriked fpStrikedBefore jsStriked").Item(0).innerText
Однако, когда HTML имеет более одного атрибута в классе, содержащем цену, предыдущий код не может извлечь информацию.
Вот пример класса, содержащего несколько атрибутов
"span class="fpPrice price jsMainPrice jsProductPrice hideFromPro" itemprop="price" content="33.99" 33<sup>€99</sup>"
цена = html.getElementsByClassName(«fpPrice price jsMainPrice jsProductPrice hideFromPro»).Элемент(0).Внутренний текст
Как я могу адаптировать код, чтобы получить цену (33,99) в этом случае?
Ответ №1:
В приведенном выше коде getElementsByClassName выбрал бы все элементы со всеми 3 классами («fpStriked fpStrikedBefore jsStriked»), но в вашем span нет ни одного из этих классов для выбора.
Комментарии:
1. Первый был всего лишь примером того, что работало у меня на других веб-сайтах. Если я применю ту же логику во втором случае, это не сработает price = html.getElementsByClassName(«fpPrice price jsMainPrice jsProductPrice hideFromPro»). Элемент(0).Внутренний текст
Ответ №2:
Вы можете выбрать все элементы с классами с помощью querySelectorAll (проверьте примеры), например document.querySelectorAll(".fpStriked, .fpStrikedBefore, .jsStriked")
С getElementsByClassName
— вы не можете
UPD: Как получить содержимое из querySelectorAll
querySelectorAll возвращает HTML-коллекцию, которую вы можете использовать .forEach для получения содержимого для каждого элемента
let allItems = document.querySelectorAll(".jsProductPrice, .fpStriked, .fpStrikedBefore, .jsStriked")
allItems.forEach(e=>{
console.log(e.textContent)
})
<span class="fpPrice price jsMainPrice jsProductPrice hideFromPro" itemprop="price" content="33.99"> 33<sup>€99</sup></span>
<span class="fpPrice price jsMainPrice jsProductPrice hideFromPro" itemprop="price" content="35"> 35<sup>€00</sup></span>
Комментарии:
1. Спасибо. На самом деле первый код работает хорошо. Однако, когда я хочу получить цену из HTML-кода, приведенного ниже в моем вопросе, с помощью price = html.getElementsByClassName(«fpPrice price jsMainPrice jsProductPrice hideFromPro»). Элемент(0).Внутренний текст не работает. При использовании document. querySelectorAll Я получаю сообщение об ошибке «Требуется объект»
2. @DavidMorales проверяет обновление, querySelectorAll возвращает HTML-коллекцию