【问题标题】:Get Text from Span returns empty string从 Span 获取文本返回空字符串
【发布时间】:2016-10-09 07:52:56
【问题描述】:

我正在尝试使用 python 和 selenium 从这个 div 内的 span 中获取文本:

<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

提前致谢,

【问题讨论】:

  • 您可以像这样简化搜索:line = dr.find_element_by_xpath('//div[@class="product-name"]/span').text。如果还是不行,可能是同步问题(等待元素而不是搜索)

标签: python selenium web-scraping phantomjs


【解决方案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")

注意:- 如果只有所需的文本,您也可以使用上述操作在父 &lt;div&gt; 元素上使用 class_name 获取内部文本:-

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

或者

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

【讨论】:

  • 是的,我使用了 css 选择器并且它有效,但我只是想知道为什么我的方法不起作用。
  • 很难说为什么你的方法不起作用,你的方法也是绝对正确的,我认为有更多具有相同类名的元素并且它正在定位其他跨度而不是欲望。谢谢..
【解决方案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')

可能记错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2013-10-25
    相关资源
    最近更新 更多