본문 바로가기
Cording/Pyhon_크롤링

Python] Selenium 기본 사용법 - find 사용법 - 오류 해결 포함

by €€£¥ 2022. 12. 10.

'WebDriver' object has no attribute 'find_element_by_tag_name' 오류가 나오는 경우에 대한 해결책을 포함한 셀레니움(Selenium)의 사이트 페이지 내에서 필요한 요소를 찾아주는 find 사용법을 알아보자. 

 

셀레니움(Selenium)의 기초 세팅에 대해서는 앞선 포스팅에서 바로 사용가능한 코드와 함께 설명해두었으니 라이브러리의 설치와 웹드라이버의 설정이 필요한 사람은 아래 링크로 먼저 확인하길 바란다. 

Python] Selenium 기본 세팅 및 사이트 호출방법 - 코드포함

 

Samla's Study

News & Issues about Economy // About Chess

getitall.tistory.com

 

셀레니움(Selenium) WebDriver' object has no attribute ' 'find_element_by_tag_name 오류 해결

셀레니움(Selenium)의 find_element / find_elements 함수를 사용하면 크롤링하는 페이지 내의 원하는 요소들을 찾을 수 있다. 이 함수를 이해하기 전에 기초적인 html과 css에 대한 지식이 필요하지만 여기까지 찾아온 코알못은 그정도는 대충은 알고 있으리라 생각하고 진행하겠다. 

 

필자와 같은 띄엄띄엄 코딩 공부를 한 코알못의 경우에는 셀레니움(Selenium)의 find_element 함수를 아래와 같은 방식으로 사용 할 것이다. 

# 페이지 내 "h3" 태그를 사용하는 첫번째 내용의 요소 찾기
item_1 = driver.find_elemet_by_tag_name("h3")

이 코드로 실행 시키면 아마 아래와 같은 오류가 발생할 것이다. 결론부터 말하자면 현재 사용되고 있는 셀레니움(Selenium) ver 4.3.0 이상에서는 문법이 바뀌어서 위의 코드를 사용할 수 없다는 얘기이다. 간단한 해결방법은 아래의 2가지가 있다.

AttributeError: 'WebDriver' object has no attribute 'find_elemet_by_tag_name'
  • 설치되어 있는 셀레니움(Selenium)의 버전을 이전 버전으로 다운그레이드 하는 방법
  • 변경된 셀레니움(Selenium)의 문법으로 변경하는 방법

어떤 방법을 선택할지는 자유이겠지만, 앞으로 전진을 해가는 코알못으로서는 최신의 문법을 사용하는 것이 바람직하지 않을까 한다. 

 

 

셀레니움(Selenium) 4.3.0 이후 버전에서의 find_element / find_elements 문법

셀레니움(Selenium) 4.3.0 이후 버전에서 어떻게 find_element 문법이 변경되었는지 간략하게 요약하면 아래와 같다. 

# 기본 사용법
item = driver.find_element(By."요소", "값")

# tag_name으로 예를 들자면 아래와 같다.
item = driver.find_element(By.TAG_NAME, 'h3')


# 변수 'item'에 저장된 내용을 출력하는 코드
print(item.text)

 

 

셀레니움(Selenium) 4.3.0 이전의 find_element 문법과 어떻게 변경되었는지 좀 더 구체적으로 표로 정리해 보았다. 우리 코알못들에게 도움이 되길 바란다. 좀 더 편하고 직관적인 느낌의 코드로 변경되었다. 역시 새로운 코드로 기억하는 것이 좋겠다. 

4.3.0 이전 버전 (OLD) 4.3.0 이후 버전 (NEW)
find_element_by_id(‘id’) find_element(By.ID, ‘id’)
find_element_by_name(‘name’) find_element(By.NAME, ‘name’)
find_element_by_xpath(‘xpath’) find_element(By.XPATH, ‘xpath’)
find_element_by_link_text(‘link_text’) find_element(By.LINK_TEXT, ‘link_text’)
find_element_by_partial_link_text(‘partial_link_text’) find_element(By.PARTIAL_LINK_TEXT, ‘partial_link_text’)
find_element_by_tag_name(‘tag_name’) find_element(By.TAG_NAME, ‘tag_name’)
find_element_by_class_name(‘class_name’) find_element(By.CLASS_NAME, ‘class_name’)
find_element_by_css_selector(‘css_selector’) find_element(By.CSS_SELECTOR, ‘css_selector’)

 

필자의 공부를 위한 포스팅이지만 필자와 같은 코알못들에게 조금이나마 도움이 되었으면 좋겠다. 작게라도 도움이 되었다면 포스트의 광고를 한 번 클릭해주는 센스를 부탁한다.

댓글