Получение текста в абзаце путем поиска текста, выделенного жирным шрифтом

avatar
belle
1 июля 2021 в 20:53
56
3
0

Я пытаюсь получить текст из абзаца и в настоящее время использую driver.find_element_by_xpath("//*[contains(text(), 'Definition')]").text

Однако проблема в том, что html имеет следующий формат:

<p>
   <b> Definition: </b>
"text that i also need to get"
</p>

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

Источник

Ответы (3)

avatar
Raymond
2 июля 2021 в 02:37
0

xPathResult = document.evaluate('//b[text()=" Definition: "]/parent::p', document);
if (xPathResult) {
  p_tag_parent = xPathResult.iterateNext();
  console.log(p_tag_parent.innerText);

}
<p>
  <b> Definition: </b> "text that i also need to get"
</p>

Вы можете выполнить поиск элемента с определением: и затем получить родительский элемент p.

p_tag_parent_text = driver.find_element_by_xpath('//b[text()=" Definition: "]/parent::p').text;
avatar
JD2775
1 июля 2021 в 21:09
0

Предполагая, что у вас уже есть определенный элемент bold_tag (не текстовое значение, а сам конкретный элемент, который вас интересует), вы можете попробовать следующее:

p_tag = bold_tag.find_element_by_xpath("./..") # go up a level to <p> parent
print(p_tag.text)

РЕДАКТИРОВАТЬ: я перечитал ваш OP, и похоже, что вы его определили, поэтому полный код будет выглядеть так:

bold_tag = driver.find_element_by_xpath("//b[contains(text(), 'Definition:']")
p_tag = bold_tag.find_element_by_xpath("./..") # go up a level to <p> parent
print(p_tag.text)
avatar
accidentalcaveman
1 июля 2021 в 21:03
0

Что возвращается? Я не знаком с этой библиотекой, но если возвращаются теги и внутренний текст, вы потенциально можете определить строку как <b> Definition: </b>. Затем используйте тот же метод, чтобы получить внешний элемент <p>.