2017-05-11 73 views
0

這裏是我的代碼:如何用python硒獲取多個元素的文本內容?

def textfinder(): 
    try: 
     textfinder1 = driver.find_elements_by_class_name("m-b-none").text 
    except NoSuchElementException: 
     pass 
     print("no such element") 
    print(textfinder1) 

當我使用find_element它的工作原理只是,當我使用find_element 小號它給我的錯誤「列表」對象有沒有屬性「文本」。我知道它返回列表,我只是不知道如何「閱讀」它。當我從命令中移除.text時,我得到的並不是錯誤,而是一些奇怪的數據,但我需要該類的文本內容。

+0

以防萬一,請注意你的'pass'是無用的。但是你一定知道這一點。 – Kanak

回答

1

其實,當你做

text = driver.find_element_by_class_name("m-b-none").text 

你會得到一個匹配的第一個元素,而這種元素具備,由於硒,屬性名稱爲text一種反證,當你做

matched_elements = driver.find_elements_by_class_name("m-b-none") 
            ^

它會匹配所有對應的元素。鑑於matched_elements是一個列表,並且這個列表是一個Python本地的列表(它不是,例如,一個Selenium修改的對象,它具有text作爲屬性),您將不得不通過它,迭代地獲取每個元素的文本。具體如下

texts = [] 
for matched_element in matched_elements: 
    text = matched_element.text 
    texts.append(text) 
    print(text) 

或者,如果你要離開你的代碼不變越好,你可以做一個行

texts = [el.text for el in driver.find_elements_by_class_name("m-b-none")] 
+0

謝謝,這個工程 – user3281831

1

您需要引用每個像列表的元素。事情是這樣的:

textfinder1 = driver.find_elements_by_class_name("m-b-none") 

for elements in textfinder1: 
    print elements.text 
1

find_elements_by_class_name返回一個列表,所以你應該做的方法:

text = '' 
textfinder1 = driver.find_elements_by_class_name("m-b-none") 
for i in textfinder1: 
    text += i.text + '\n' #or whatever the way you want to concatenate your text 
print(text)