Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python】Selenium4での「'WebDriver' objects has no attribute 'find_element_by_name'」などのエラーについての対処方法

 

Seleniumを活用して要素取得など行っているときに出るエラーの1つに「'WebDriver' objects has no attribute 'find_element_by_name'」などのエラーがあります。

 

以下はその内容の説明と対処方法についてになります。

 

 

 

目次

 

1.find_elementの書式について

 

たとえば、SeleniumをVer.3からVer.4に上げた時などにそれまで出ていなかった以下のようなエラーが出ることがあります。

 

 

find_elementでの発生エラー

find_elementでの発生エラー

 

これは、それまで要素取得するような場合にfind_element_by_name("name")などと書いていた書式がSelenium4では推奨されなくなったというようなところからきています。

 

 さらに、そのような書式で記載した場合に当初はWarningレベルだったのですが最近はエラーが出るように変わってしまったものです。

 

そのため、書式としては、推奨されている書き方として、

 

find_element_by_name("name1")      ⇒ find_element(By.NAME,"name1")

find_element_by_id("id1")                  ⇒ find_element(By.ID,"id1")

 

のように変更しなければならないようになりました。 

 

 

2.よく使われるfind_elementについて旧方式と新方式の書式一覧

 

よく使われる書式についての旧方式と新方式の記載方法一覧はおよそ以下のようになります。

 

 

  旧方式 新方式
name属性 driver.find_element_by_name("name1")  driver.find_element(By.NAME,"name1")
id属性 driver.find_element_by_id("id1") driver.find_element(By.ID,"id1")
タグ名 driver.find_element_by_tag_name("tagname1") driver.find_element(By.TAG_NAME,"tagname1")
class属性 driver.find_element_by_class_name("classname1") driver.find_element(By.CLASS_NAME,"tagname1")
linkText driver.find_element_by_link_text(“element_link_text1”) driver.find_element(By.LINK_TEXT, “element_link_text1”)
partialLinkText driver.find_element_by_partial_link_text(“element_partial_link_text1”) driver.find_element(By.PARTIAL_LINK_TEXT, “element_partial_link_text1”)
cssセレクタ driver.find_element_by_css_selector(“element_css_selector1”) driver.find_element(By.CSS_SELECTOR, “element_css_selector1”)
xpath driver.find_element_by_xpath(“element_xpath1”) driver.find_element(By.XPATH, “element_xpath1”)

 

 

また、リスト型で複数要素取得するような場合には以下のように「find_element」が「find_elements」になります。

「id属性」は複数ないためこちらのリストにはありません。

 

 

  旧方式 新方式
name属性 driver.find_elements_by_name("name1")  driver.find_elements(By.NAME,"name1")
タグ名 driver.find_elements_by_tag_name("tagname1") driver.find_elements(By.TAG_NAME,"tagname1")
class属性 driver.find_elements_by_class_name("classname1") driver.find_elements(By.CLASS_NAME,"tagname1")
linkText driver.find_elements_by_link_text(“elements_link_text1”) driver.find_elements(By.LINK_TEXT, “elements_link_text1”)
partialLinkText driver.find_elements_by_partial_link_text(“elements_partial_link_text1”) driver.find_elements(By.PARTIAL_LINK_TEXT, “elements_partial_link_text1”)
cssセレクタ driver.find_elements_by_css_selector(“elements_css_selector1”) driver.find_elements(By.CSS_SELECTOR, “elements_css_selector1”)
xpath driver.find_elements_by_xpath(“elements_xpath1”) driver.find_elements(By.XPATH, “elements_xpath1”)

 

 

以上が「'WebDriver' objects has no attribute 'find_element_by_name'」などのエラーについての対処方法になります。