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']

3 番目の一致を取得するには、次の 2 つの方法があります。

#  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 は ap タグです

webelement.text()  

実際の状況、スタックトレースから:

print page_box_block.text() TypeError: 'unicode' オブジェクトは呼び出せません

stdout では html であることが期待されますが、そうではありません。

「Unicodeオブジェクトは呼び出し可能ではありません」という奇妙な文字列になることもあれば、タイプエラーの解決策は非常に簡単です。

print element.get_attribute("innerHTML")

Java では、 get_attribute("innerHTML") と text() は、要素からプレーンテキストが必要な場合、ほぼ「同じ」です Python 2.7 では、現時点では text() が失敗することがあります。

于 2014-01-30T10:32:00.190 に答える