Печать всех текстов, требуется только один - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть HTML-файл:

<div class="panel-heading">
Some Text1
<strong>Hello</strong>
</div>
<div>
Some Text2
Some Text3
<strong>
Hi1
Hi2
</strong

Я хочу напечатать только Привет в моем скрипте Python с использованием селена, поэтому я попытался:

element = driver.find_element_by_xpath("//div[@class='panel-heading']")    
for element in driver.find_elements_by_tag_name('strong'):
    print (element.text)

Результат:

Hello

Hi1

Hi2

Но я хочу только:

Hello

Ответы [ 4 ]

0 голосов
/ 11 сентября 2018

Вы допустили небольшую ошибку в своем коде, вы получаете div с panel-heading, но в цикле, который вы повторяете, выкидываете все элементы с тегом strong в DOM.Возможно, вот как вы хотели, чтобы это было:

divElement = driver.find_element_by_xpath("//div[@class='panel-heading']")    
for element in divElement.find_elements_by_tag_name('strong'):
    print (element.text)

Но div с panel-heading содержит только один span и strong, вы можете получить его с помощью селектора css:

strongText = driver.find_element_css_selector(".panel-heading strong").text
0 голосов
/ 11 сентября 2018

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

element = driver.find_element_by_xpath("//div[@class='panel-heading']")
print(element.find_element_by_tag_name('strong').text)

для печати первый strong текст из обязательных div

Обратите внимание, что for element in driver.find_elements_by_tag_name('strong') означает итерацию по всем strong узлам на странице. Вам нужно заменить driver на element, чтобы перебрать потомки strong s определенного WebElement:

for strong in element.find_elements_by_tag_name('strong'):
    print(strong.text)
0 голосов
/ 11 сентября 2018

Ваш код даст вам список.Поэтому просто используйте первый элемент списка, который даст вам «Hello».

element = driver.find_elements_by_tag_name('strong')[0]
0 голосов
/ 11 сентября 2018

Вы можете использовать next:

for element in driver.find_elements_by_tag_name('strong'):
    print(next(element.text for element in driver.find_elements_by_tag_name('strong')))

Или менее загадочным и более устойчивым, если такого элемента нет, просто break цикл после печати:

for element in driver.find_elements_by_tag_name('strong'):
    print(element.text)
    break
...