Selenium не находит атрибут

Пытаюсь парсить сайт, в коде есть такой отрезок:
<span content="81000" itemprop="price" class="styles-module-size_xxxl-GRUMY" data-marker="item-view/item-price">81&nbsp;000 <span itemprop="priceCurrency" content="RUB" class="styles-module-size_xxxl-GRUMY">&nbsp;₽&nbsp;</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 шт):

Автор решения: shalor1k

Проблема с атрибутом 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, но на самом деле являются символами &nbsp;, это происходит потому, что &nbsp; представляет собой неразрывный пробел. В вашем HTML-коде это выглядит так:

<span content="81000" itemprop="price" class="styles-module-size_xxxl-GRUMY" data-marker="item-view/item-price">
    81&nbsp;000 
    <span itemprop="priceCurrency" content="RUB" class="styles-module-size_xxxl-GRUMY">&nbsp;₽&nbsp;</span>
</span>

&nbsp; - это HTML-сущность для неразрывного пробела. Когда браузер рендерит эту страницу, он отображает 81 000, но если вы посмотрите исходный HTML, вы увидите 81&nbsp;000. Это не должно повлиять на ваш парсинг, так как вы пытаетесь получить атрибут content, который не зависит от рендеринга этих символов.

p.s Если и этот код не помог решить вашу проблему, проверьте присутствует ли интересующий вас отрезок на странице в момент выполнения вашего кода

Источник

→ Ссылка