从Span获取Text返回空字符串

时间:2016-10-08 21:46:11

标签: python selenium web-scraping phantomjs

我试图通过python和selenium从div中获取文本:

<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

提前致谢,

2 个答案:

答案 0 :(得分:1)

您应该尝试使用css_selector在一个查找语句中查找欲元素,如下所示: -

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

如果您仍然获得空字符串,请尝试使用get_attribute("textContent"): -

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元素上获取innerText
line = dr.find_element_by_class_name('product-name').text

或者

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

答案 1 :(得分:0)

我发现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')

可能记得错了。