【问题标题】:Selenium - cant get text from span elementSelenium - 无法从跨度元素获取文本
【发布时间】:2015-08-30 21:09:54
【问题描述】:

我对使用 Selenium 获取文本感到非常困惑。

span 标签,里面有一些文字。当我使用driver.find_element_by_... 搜索它们时,一切正常。

但问题是无法从中获取文本。

找到了span标签,因为我不能使用.get_attribute('outerHTML')命令,我可以看到这个:

<span class="branding">ThrivingHealthy</span>

但如果我将.get_attribute('outerHTML') 更改为.text,它会返回不正确的空文本,如上所示。

这是示例(输出是字典的片段):

display_site = element.find_element_by_css_selector('span.branding').get_attribute('outerHTML')

'display_site': u'&lt;span class="branding"&gt;ThrivingHealthy&lt;/span&gt;'

display_site = element.find_element_by_css_selector('span.branding').text

'display_site': u''

您可以清楚地看到,有一个文本,但它没有找到它。有什么问题?

编辑:我找到了一种解决方法。我刚刚将.text 更改为.get_attribute('innerText')

但我还是很好奇为什么会这样?

【问题讨论】:

  • 由于我是 Selenium 的新手,我不想突然发布答案。您能否提供一个正确的 URL 来测试我的尝试?我认为,find_element_by_class_name('branding').text 可以胜任。
  • 我认为这无济于事,因为标签已正确找到,那是因为我附加了 .get_attribute('outerHTML')。但当然 - altpress.com/aptv/video/…
  • driver.get('altpress.com/aptv/video/…) print driver.find_element_by_css_selector('span.branding').get_attribute('outerHTML') 返回 StarFluff 所以肯定找到了元素跨度。所以将 get_attribute... 更改为 .text 应该可以,但它不会...
  • 从第一个 &lt;span&gt; 标签中取出文本 StartFluff 不是问题:for e in driver.find_elements_by_class_name('branding'): print(e.text)
  • display_site = element.find_element_by_css_selector('span.branding').get_attribute('innerHTML') 工作吗?

标签: python selenium text selenium-webdriver


【解决方案1】:

问题是有很多标签是使用span.branding 获取的。当我刚刚使用find_elements(复数)查询该页面时,它返回了 20 个标签。每个标签似乎都加倍了......我不知道为什么,但我的猜测是一组是隐藏的,而另一组是可见的。据我所知,这对中的第一个是隐藏的。这可能就是您无法从中提取文本的原因。 Selenium 的设计是不与用户无法交互的元素进行交互。这可能就是您可以获取元素但当您尝试提取文本时,它不起作用的原因。您最好的选择是使用find_elements 拉出整个集合,然后循环遍历集合以获取文本。您将像 20 一样循环,并且只能从 10 中获取文本,但看起来您仍然会得到整个集合。这很奇怪,但它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多