& NBSP; в Python 3.6 - получение текста с использованием xpath
<div class = "card-block cms>
<p>and then have a tea or coffee on the balcony of the cafeteria.</p>
<p> </p>
</div>
Я пытаюсь проверить, содержит ли текст, который я сканирую, веб-сайт
texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.text
print(textInDivTag)
if u"\xa0" in textInDivTag:
print("yes")
Мой вывод выглядит следующим образом:
а затем выпить чай или кофе на балконе столовой.
Как видите, он не распознает неразрывный пробел.
4 ответа
Неразрывный пробел (
)
Неразрывное пространство то есть
это пространство, которое не будет переходить в новую строку. Два слова, разделенные неразрывным пробелом, будут слипаться (не разбиваться на новую строку). Это удобно, когда ломать слова могут быть разрушительными. Примеры:
- § 10
- 10 км / ч
- 10 вечера
Другое распространенное использование неразрывного пробела - это предотвращение усечения браузерами пробелов в HTML-страницах. Если вы напишите в своем тексте 10 пробелов, браузер удалит 9 из них. Чтобы добавить реальные пробелы в ваш текст, вы можете использовать
персонаж персонажа.
Element.innerHTML
Синтаксис:
const content = element.innerHTML; element.innerHTML = htmlString;
Значение:
Element.innerHTML
является DOMString, содержащим сериализацию HTML потомков элемента. Установка значения innerHTML удаляет всех потомков элемента и заменяет их узлами, созданными путем анализа HTML, заданного в строке htmlString.Примечание: если
<div>
,<span>
, или же<noembed>
узел имеет дочерний текстовый узел, который включает символы (&
), (<
), или же (>
), innerHTML возвращает эти символы как объекты HTML&
,<
а также>
соответственно. Используйте Node.textContent, чтобы получить необработанную копию содержимого этих текстовых узлов.
Node.innerText
Node.innerText
это свойство, которое представляет визуализированное текстовое содержимое узла и его потомков. Как получатель, он аппроксимирует текст, который получит пользователь, если он выделит содержимое элемента курсором и затем скопирует в буфер обмена.
Node.textContent
Node.textContent
Свойство представляет текстовое содержимое узла и его потомков.
Синтаксис:
var text = element.textContent; element.textContent = "this is some sample text";
Описание:
textContent
возвращаетсяnull
если узел является документом, DOCTYPE или нотацией. Чтобы получить весь текст и данные CDATA для всего документа, можно использоватьdocument.documentElement.textContent
,- Если узел представляет собой раздел CDATA, комментарий, инструкцию обработки или текстовый узел,
textContent
возвращает текст внутри этого узла (nodeValue). - Для других типов узлов textContent возвращает конкатенацию textContent каждого дочернего узла, за исключением комментариев и инструкций по обработке. Это пустая строка, если у узла нет дочерних элементов.
Этот случай использования
Как ваш случай использования, чтобы проверить, содержит ли веб-сайт
Вы должны использовать textContent
Свойство следующим образом:
texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.extContent
print(textInDivTag)
Символ распознан, но он конвертируется в обычный пробел (u"\x20"
).
Согласно комментарию в исходном коде Java Selen, .text
/ .getText()
возвращает видимый текст и ссылается на спецификацию веб-драйвера w3c, раздел "11.3.5 Получить текст элемента" (выделено мной):
Команда Get Element Text намеревается вернуть текст элемента "как визуализированный". Рендеринг текста элемента также используется для поиска элементов по их тексту ссылки и частичному тексту ссылки.
Одним из основных входов в эту спецификацию был проект Selenium с открытым исходным кодом. Это было широко распространено до написания этой спецификации, и поэтому установило ожидания пользователей относительно того, как должна работать команда Get Element Text. Таким образом, представленный здесь подход, как известно, имеет недостатки, но обеспечивает наилучшую совместимость с существующими пользователями.
Поэтому, вероятно, это поведение соответствует спецификации, но я пока не смог найти исходный код, специально заменяющий неразрывные пробелы обычными пробелами. Я также не смог найти проблему в репозитории Селен, но, возможно, вы можете попробовать, открыв ее.
Соответствовать u"\xa0"
использование
textInDivTag = texts.get_attribute('innerText')
соответствовать u"\x20"
использование
textInDivTag = texts.text
Попробуйте использовать texts = driver.find_elements_by_xpath("//div[@class='card-block cms']")
, это вернет список всех WebElements с этим классом, затем вы можете проверить, есть ли неразрывный пробел в каком-либо из них или в определенном.