2017-05-11 8 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ある属性への感謝を持っています。 contrario、あなたが

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

を行う際には、対応するすべての要素にマッチします。 matched_elementsがリストであり、このリストがPythonネイティブのものである(たとえば、属性としてtextを持つSeleniumで修正されたオブジェクトではない)場合は、それを繰り返し処理し、各要素のテキスト。

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

を次のそれとも、可能な限り変わらないあなたのコードを残したい場合、あなたはそれを1行あなたは、リストの要素のように、それぞれを参照する必要があるでしょう

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) 
関連する問題