Selenium не находит атрибут
Пытаюсь парсить сайт, в коде есть такой отрезок:
<span content="81000" itemprop="price" class="styles-module-size_xxxl-GRUMY" data-marker="item-view/item-price">81 000 <span itemprop="priceCurrency" content="RUB" class="styles-module-size_xxxl-GRUMY"> ₽ </span></span>
Написал такой код:
`priceInfBlock = driver.find_element(By.CLASS_NAME, "styles-module-size_xxxl-GRUMY")
priceInf = priceInfBlock.get_attribute("content")`
Не получается получить значение атрибута content, возвращает None. И на сайте который обрабатывает селениум этот блок точно есть, проблем с его нахождением нет, только с атрибутом.
Причём если я хочу получить например атрибут itemprop то всё работает правильно.
PS:
Что за символы в тегах span? если выбрать их в DevTools то выбираются нормальные цифры.
Ответы (1 шт):
Проблема с атрибутом content
Когда вы пытаетесь получить значение атрибута content из элемента с помощью Selenium, возможно, элемент, который вы нашли, не содержит этот атрибут напрямую. В вашем случае, у вас есть два элемента span с классом styles-module-size_xxxl-GRUMY, но только один из них имеет атрибут content.
Нужно изменить ваш код, чтобы найти элемент с атрибутом content напрямую:
priceInfBlock = driver.find_element(By.XPATH, "//span[@content and @class='styles-module-size_xxxl-GRUMY']")
priceInf = priceInfBlock.get_attribute("content")
Эта строка XPath найдет элемент span, который имеет как атрибут content, так и класс styles-module-size_xxxl-GRUMY.
Что касается символов в теге span
Символы в теге span, которые выглядят как цифры в DevTools, но на самом деле являются символами , это происходит потому, что представляет собой неразрывный пробел. В вашем HTML-коде это выглядит так:
<span content="81000" itemprop="price" class="styles-module-size_xxxl-GRUMY" data-marker="item-view/item-price">
81 000
<span itemprop="priceCurrency" content="RUB" class="styles-module-size_xxxl-GRUMY"> ₽ </span>
</span>
- это HTML-сущность для неразрывного пробела. Когда браузер рендерит эту страницу, он отображает 81 000, но если вы посмотрите исходный HTML, вы увидите 81 000. Это не должно повлиять на ваш парсинг, так как вы пытаетесь получить атрибут content, который не зависит от рендеринга этих символов.
p.s Если и этот код не помог решить вашу проблему, проверьте присутствует ли интересующий вас отрезок на странице в момент выполнения вашего кода