Селен: Получить текст в элементе с дочерним элементом, содержащим определенный класс - PullRequest
0 голосов
/ 01 марта 2019

Моя HTML-страница выглядит так:

<div class="some class">
<p>
   <i class="class1"></i>
   Some Text
</p>
<p>
   <i class="class2"></i>
   Some Text
</p>
.  .  .
.  .  .
.  .  .
</div

Я хочу получить текст.В настоящее время я пытаюсь:

elem = browser.find_element_by_xpath("//div[@class='some class']")
text = elem.find_element_by_xpath("//p/i[@class='class1']").text

Но он возвращает пустую строку.Я не могу понять почему.Я новичок в селене.Пожалуйста, помогите.

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

Предполагая, что ваши class1 и class2 отличаются, вы можете использовать этот селектор css

div.some class > p:nth-child(1), чтобы получить текст внутри него.Поскольку текст находится внутри тега <p> para, вы можете получить текст из первого тега <p>.

elem = browser.find_element_by_css_selector("div.some class > p:nth-child(1)")
text = elem.text

Это должно дать вам текст внутри элемента.

0 голосов
/ 01 марта 2019

Вы используете xpath ниже:

# Find "i" element with "class1" css class and get first parent "p" element
elem = browser.find_element_by_xpath("//i[@class='class1']/ancestor::p[1]")
# Same as previous with added "div"
elem = browser.find_element_by_xpath("//div[@class='some class']//i[@class='class1']/ancestor::p[1]")

# Find "p" element with child "i" element with "class1" css class
elem = browser.find_element_by_xpath("//p[./i[@class='class1']]")
# Same as previous with added "div"
elem = browser.find_element_by_xpath("//div[@class='some class']//p[./i[@class='class1']]")
0 голосов
/ 01 марта 2019

вы можете использовать execute_script

xPath = "//div[@class='some class']"
try:
    element = driver.find_element_by_xpath(xPath)
        b1Text = driver.execute_script("return arguments[0].childNodes[2].textContent", element);
        print(b1Text)
except:
       print()

попробуйте изменить значение внутри childNodes[N], например, childNodes [2], childNodes [1]

0 голосов
/ 01 марта 2019

Ваш селектор захватывает элемент i, имеющий атрибут class="class1".i не имеет текста, поэтому это пустая строка, поэтому исправить это:

elem = browser.find_element_by_xpath("//div[@class='some class']")

# Now let's find the i element you want
i_elem = elem.find_element_by_xpath("//i[@class='class1']")

# Now find the parent of that i_elem, which is p
p_elem = [p for p in i_elem.iterancestors() if p.tag=='p'][0]

txt = p_elem.text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...