#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')
Возможно, я ошибаюсь.