28

这应该很容易,但我无法让它工作。我正在使用 Google 主页作为测试运行一个小演示。

这是我的脚本:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get("http://www.google.com") # Load page

time.sleep(0.2)

#top nav elements
elems = browser.find_elements_by_xpath("//span[contains(@class, 'gbts')]") 

for e in elems:
    print e.get_attribute('text')

browser.close()

它返回:

None
None
None
None
None
None
None
None
None
None
None

所以我认为它抓住了正确的元素,但也许不是正确的属性?没有把握。我也尝试打印 e.text() 但这吐出来:

Traceback (most recent call last):
  File "sample.py", line 14, in <module>
    print e.text()
TypeError: 'unicode' object is not callable

有什么想法吗?

*编辑 - 可能的解决方案?*

e.get_attribute('innerHTML') seems to work.
4

2 回答 2

38

这应该这样做:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.google.com")
for elem in browser.find_elements_by_xpath('.//span[@class = "gbts"]'):
    print elem.text

textWebElement类的属性,因此它是不可调用的。

class WebElement(object):
    """Represents an HTML element.       
    ...
    ...

    @property
    def text(self):
        """Gets the text of the element."""
        return self._execute(Command.GET_ELEMENT_TEXT)['value']

您有两种选择来获得第三场比赛:

#  1. Modify your xpath expression
browser.find_elements_by_xpath('(.//span[@class = "gbts"])[3]')[0].text

#  2. Access it by list index
browser.find_elements_by_xpath('.//span[@class = "gbts"])')[2].text
于 2013-01-29T19:23:25.067 回答
20

是的 !找到解决方案(我正在使用 Python)例如:webelement is ap tag

webelement.text()  

从实际情况来看,stacktrace:

print page_box_block.text() TypeError: 'unicode' object is not callable

它希望是标准输出中的 html,但不是!

有时可能是一个奇怪的字符串“unicode object is not callable”或者某些类型的错误解决方案很容易:

print element.get_attribute("innerHTML")

在 java get_attribute("innerHTML") 和 text() 即将“相同”,如果您需要来自元素的纯文本在 Python 2.7 现在 text() 有时会失败。

于 2014-01-30T10:32:00.190 回答