Seleniumを活用して要素取得など行っているときに出るエラーの1つに「'WebDriver' objects has no attribute 'find_element_by_name'」などのエラーがあります。
以下はその内容の説明と対処方法についてになります。
目次
1.find_elementの書式について
たとえば、SeleniumをVer.3からVer.4に上げた時などにそれまで出ていなかった以下のようなエラーが出ることがあります。
これは、それまで要素取得するような場合に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'」などのエラーについての対処方法になります。