使用Selenium提取文本...但文本具有0不透明度

时间:2015-03-22 03:33:01

标签: python css selenium

我需要在类“one”中提取文本。 我有以下代码:

h3 = browser.find_element_by_class_name("one")

h3 = h3.text

print(h3)

问题是结果是一个空字符串...似乎没有打印出来。
经过进一步检查,该类中的文本的不透明度为“0”。我假设这是导致问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

el = browser.find_element_by_class_name("one")
print el.get_attribute('innerHTML')
> Success

WebElement.text知道CSS样式,因此el.text返回一个空行,而el.get_attribute('innerHTML')将返回html(在本例中为文本)。

或者,如果要使用.text属性,可以更改CSS以使文本可见。在这种特殊情况下,不仅是不透明度,还包括您需要修改的包含div的显示和可见性样式。例如:

browser.execute_script("var a = document.getElementById('result-error').style; a.display = 'block'; a.visibility = 'visible'; a.opacity = 100;")
el = browser.find_element_by_class_name("one")
print el.text

但是.get_attribute('innerHTML')不那么具有侵入性,并且对于你在这里尝试做的事情也很好。

更新1:

由于我不确切知道您的要求是什么,这里是我的代码,它从https://www.voilanorbert.com/抓取所有带有“one”类的元素,并为每个元素打印innerHTML

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get('https://www.voilanorbert.com/')

ones = driver.find_elements_by_class_name('one')

for el in ones:
    print el.get_attribute('innerHTML')

driver.close()

> Oh man, I broke my ankle
> Nothing found
> Catch-all
> Success
> I'm tired