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 Если и этот код не помог решить вашу проблему, проверьте присутствует ли интересующий вас отрезок на странице в момент выполнения вашего кода