본문 바로가기

카테고리 없음

파이썬 Selenium을 이용해서 특정 요소의 부모 요소 선택하기

파이썬 셀레니움을 이용해서 웹사이트를 제어하는 일을 생각해보면, 바로바로 내가 원하는 요소를 동작시켜서 일을 끝마치면 될 것 같습니다. 대개의 경우에는 이렇게 특정 요소를 바로 직접적으로 찾아들어가면 더 편하고 빠르게 작업을 할 수 있겠지만, 그렇지 못한 경우가 있습니다.

 

이럴 경우 내가 원하는 요소를 지정하기 위해서 그 요소의 더 위에서부터 타고 내려오던가, 아니면 밑에서부터 거꾸로 올라가는 방법을 생각해 볼 수 있습니다. 어떤 방법이 되었던 id나 class를 이용해서 명확하게 기준을 삼을 수 있는 부분이 있는 방법을 사용하면 되겠죠. 무슨 방법이든 결과만 똑같다면 방법 선택은 개인의 취향 차이라고 생각합니다.

 

위에서부터 선택해서 내려가는 방법이야 기본적으로 여러 가지 방법이 널리 알려져 있으니 이번에는 밑에서부터 선택하는 방법을 알아보려 합니다. 셀레니움을 이용해서 ①특정 요소 선택하고 ②그다음에 부모 요소를 선택하는 방법을 차례대로 보겠습니다.

 

CSS 셀렉터를 이용해서 특정 요소 선택하기 

CSS 선택자를 이용하면 손쉽게 내가 원하는 요소를 선택할 수 있습니다. 개인적으로 가장 익숙해서 선호하는 방법입니다. 

 

from selenium import webdriver
driver = webdriver.Chrome()

url = ""
driver.get(url)

driver.find_element_by_css_selector("CSS 선택자")
driver.find_elements_by_css_selector("CSS 선택자")

 

- find_element_by_css_selector: 입력한 CSS 선택자 조건을 만족하는 모든 요소 중 첫 번째 요소를 반환

- find_elements_by_css_selector: 입력한 CSS 선택자 조건을 만족하는 모든 요소를 리스트에 담아서 반환

 

이렇게 CSS 셀렉터를 이용해서 자식 요소를 선택했다면, 이제 그 부모 요소를 선택할 차례입니다.

 

xpath를 이용해서 특정 요소의 부모 요소 선택하기

CSS 셀렉터를 이용해서 부모 요소를 선택하는 방법은 아쉽게도 없는 것 같습니다. (혹시 아시는 분이 이 글을 보신다면 댓글 부탁드립니다.) xpath를 이용하면 단 한 줄로 쉽게 부모 요소를 선택할 수 있습니다. 

 

find_element_by_xpath('..')

 

이제 모든 방법을 알았으니 함께 붙여서 사용하면 됩니다. 예를 들어 최종적으로 원하는 것이 요소(들)를 클릭하는 것이라면 다음과 같이 작성할 수 있습니다.

 

# 요소가 하나일 경우
driver.find_element_by_css_selector("CSS 선택자").find_element_by_xpath('..').click()

3 요소가 여러개인 경우
for i in driver.find_elements_by_css_selector("CSS 선택자"):
	i.find_element_by_xpath('..').click()

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.