AttributeErrorとは
AttributeErrorとは属性が間違っている事を知らせてくれているエラーです。
Attribute=属性という意味です。
pythonでselenium等を使用していると、
上記のエラーが発生した経験はありませんでしょうか??
メモ変わりにエラーの発生原因と解決法を書いておきます。
AttributeErrorの内容を理解しよう
AttributeError: ‘list’ object has no attribute ‘text’をざっくり翻訳すると、
リストにはテキストという属性はありませんよ!!と知らせてくれています。
単なるスペルミスで発生している可能性もありますが、テキストを取得しようとしてAttributeErrorが発生した場合、要素はリストで返ってくることを理解していない可能性があります。
AttributeErrorの発生例
実際にAttributeError: ‘list’ object has no attribute ‘text’の発生例を見てみましょう。
yahooのTOPページから検索ボックス下のトップテキストを取得しようとしたが、
AttributeError: ‘list’ object has no attribute ‘text’が返ってくるパターン
import time from selenium import webdriver d = webdriver.Chrome(r'C:\Users\user\Desktop\selenium\chromedriver') d.get('https://www.yahoo.co.jp/') time.sleep(2) h = d.find_elements_by_css_selector('#toptxt2 > a').text print(h)
File “C:\python\kizi2.py”, line 8, in <module>
h = d.find_elements_by_css_selector(‘#toptxt2 > a’).text
AttributeError: ‘list’ object has no attribute ‘text’
エラーが発生しました。
お次は変数hのテキストのみを出力しようとしたが、エラーが発生するパターン
import time from selenium import webdriver d = webdriver.Chrome(r'C:\Users\user\Desktop\selenium\chromedriver') d.get('https://www.yahoo.co.jp/') time.sleep(2) h = d.find_elements_by_css_selector('#toptxt2 > a') print(h.text)
File “C:\python\kizi2.py”, line 9, in <module>
print(h.text)
AttributeError: ‘list’ object has no attribute ‘text’
同じエラーが返ってきました。
AttributeErrorの解決法
2行以上の文章を扱うときは自然とfor文を使い繰り返し出力等を行いますが、この場合のような1行のテキストでも要素がリストで返ってくるのでfor文で出力するか、インデックスを指定して要素を取得する必要があります。
for文を使用して出力
import time from selenium import webdriver d = webdriver.Chrome(r'C:\Users\user\Desktop\selenium\chromedriver') d.get('https://www.yahoo.co.jp/') time.sleep(2) h = d.find_elements_by_css_selector('#toptxt2 > a') for i in h: print(i.text)
ループを使用しての反復処理でテキストが出力できました。
インデックスを指定して取得
次にテキストを取得するときにインデックスを指定してテキストを取得してみましょう。
一行だけのテキストにはインデックスは[0]を指定してあげます。
import time from selenium import webdriver d = webdriver.Chrome(r'C:\Users\user\Desktop\selenium\chromedriver') d.get('https://www.yahoo.co.jp/') time.sleep(2) h = d.find_elements_by_css_selector('#toptxt2 > a')[0].text print(h)
インデックスを指定してあげる事で問題なく出力できました。
今回はAttributeError: ‘list’ object has no attribute ‘text’の解決方法を解説しました。
今回の解決法やエラーの発生原因は一例です。
seleniumを使用しているとたびたび見かけるエラーかと思いますので、要素はリストで返ってくるということを再認識するようにしましょう。