Получение текста из Span возвращает пустую строку

#python #selenium #web-scraping #phantomjs

#python #селен #веб-очистка #phantomjs

Вопрос:

Я пытаюсь получить текст из span внутри этого div с помощью python и selenium:

 <div class="product-name">
    <span class="h1" itemprop="name">TEXT</span>
</div>
  

Я пробовал это, однако это возвращает пустую строку:

 line = dr.find_element_by_class_name('product-name').find_element_by_xpath('.//span').text
  

Заранее спасибо,

Комментарии:

1. вы могли бы упростить поиск следующим образом: line = dr.find_element_by_xpath('//div[@class="product-name"]/span').text . Если это все еще не работает, это может быть проблема синхронизации (дождитесь элемента вместо его поиска)

Ответ №1:

Вы должны попробовать использовать css_selector элемент to find desire в одном операторе find, как показано ниже :-

 line = dr.find_element_by_css_selector('div.product-name > span').text
  

Если вы все еще получаете пустую строку, попробуйте использовать get_attribute("textContent") as :-

 line = dr.find_element_by_css_selector('div.product-name > span').get_attribute("textContent")
  

Или использование get_attribute("innerHTML") как :-

 line = dr.find_element_by_css_selector('div.product-name > span').get_attribute("innerHTML")
  

Примечание: — Вы также можете использовать вышеуказанную операцию для получения внутреннего текста в родительском <div> элементе, используя class_name , если есть только текст желания как :-

 line = dr.find_element_by_class_name('product-name').text
  

Или

 line = dr.find_element_by_class_name('product-name').get_attribute("textContent")
  

Комментарии:

1. Да, я использовал селектор css, и он работает, но мне просто любопытно узнать, почему мой подход не работает.

2. Трудно сказать, почему ваш подход не работает, ваш подход также абсолютно правильный, я думаю, что есть еще элемент с тем же именем класса, и он находит другой диапазон вместо желания. Спасибо..

Ответ №2:

Я нахожу bs4 более интуитивно понятным, возможно, это было бы лучше?

     from bs4 import BeautifulSoup as bs4


def main():
    html = """<div class="product-name">
            <span class="h1" itemprop="name">TEXT</span>
            </div>"""
    soup = bs4(html, "html.parser")
    print(soup.find_all('div', {"class": "product-name"}))


if __name__ == '__main__':
    main()
  

Что касается вашего кода..

 line = dr.find_element_by_class_name('product-name').find_element_by_xpath('.//span').text
  

Возможно, предполагается, что это что-то более встроенное с:

 line = dr.find_element_by_classname('product-name')
  

Возможно, я ошибаюсь.