본문 바로가기

EDA/selenium

selenium 라이브러리 함수 정리

selenium을 colab에서 실행 해야 하는 경우 부가적인 설정들을 해줘야 한다.
colab이 selenium에서 창 여는것 자체를 막고 있다나 뭐라나...
너무 귀찮다... colab pro샀는데 ㅜㅜ
그래서 VSCode같은 local 환경에서 .ipynb 파일로 작성하거나 anaconda 설치하면 딸려오는 jupyter notebook을 사용하자.
(저는 jupyter notebook 환경에서 합니다.) 

기본 설정

-  jupyter notebook에서 설치

!pip install selenium
!pip install webdriver-manager


- 기본 라이브러리 import

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


- ChromeDriverManager install

ChromeDriverManager().install()

 

크롬 열기 & 원하는 url로 이동하기 : Chrome(), get()

- Chrome() : 크롬창이 열림니다. 이때 google로 이동하는 것은 아닙니다. 단지 창만 열립니다!

browser = webdriver.Chrome()


- get( "원하는 url" ) : 원하는 url로 이동합니다.

url = "https://www.naver.com"

browser.get(url)

 

웹 페이지에서 원하는 Element 가져오기 : find_element(), find_elements() 

- find_element() 는 조건에 해당되는 요소들 중 첫번째 것만 가져옴.
- find_elements() 는 조건에 해당되는 모든 요소를 가져와서 리스트로 반환.(정확히는 리스트가 아니라 iterable. 근데 편하게 list라 생각하자)

- By를 사용할 것이라 꼭!!! By를 import 해주세요. import 코드는 위에 기본 설정 부분에 적혀 있습니다!

- By.CLASS_NAME : 클래스 이름과 일치하는 요소(들) 가져옴.

# 띄어진 창에서 item이란 class를 가지고 있는 element 반환
item = browser.find_element(By.CLASS_NAME, "item")

# 띄어진 창에서 item이란 class를 가지고 있는 모든 element가 담긴 list 반환
items = browser.find_elements(By.CLASS_NAME, "item")


- By.ID : id이름이 일치하는 요소 가져옴.
id는 web상에서 하나의 요소에게만 할당되므로 find_elements랑 같이 쓰이진 않음. 

# 띄어진 창에서 item이란 id를 가지고 있는 element 반환
item = browser.find_element(By.ID, "item")


- By.TAG_NAME : tag명 (div, span, a, img 등등)이 일치하는 요소(들) 가져옴.

# 브라우저 내의 첫 번째 div 태그를 가져옴
item = browser.find_element(By.TAG_NAME, "div")

# 브라우저 내의 모든 div 태그를 가져옴
items = browser.find_elements(By.TAG_NAME, "div")


- By.CSS_SELECTOR : Css 선택자를 이용해서 요소(들) 가져옴.

# 띄어진 창에서 item이란 class를 가지고 있는 element 반환
item = browser.find_element(By.CSS_SELECTOR, ".item")

# 띄어진 창에서 item과 view class, 둘 다 가지고 있는 element 반환
itemNview = browser.find_element(By.CSS_SELECTOR, ".item.view")

# 띄어진 창에서 item이란 id를 가지고 있는 element 반환
item = browser.find_element(By.CSS_SELECTOR, "#item")

# 띄어진 창에서 item이란 class를 가지고 있는 모든 element가 담긴 list 반환
items = browser.find_elements(By.CSS_SELECTOR, ".item")


- By.XPATH : xPath를 이용해서 요소(들) 가져옴
단일 요소 가져올 때 멍꿀!

# 브라우저 내 모든 a 태그
elements = browser.find_elements(By.XPATH, "//a")

# id 값이 my_link인 첫번째 a 태그 
element = browser.find_element(By.XPATH, "//a[@id='my_link']")

 

특정 Element에서 원하는 자식 element 가져오기

- 위 방식과 똑같은데 browser가 아닌  element.find_element() 또는 element.find_elements() 로 가져올 수 있다.
- 이때 자손은 가져올 수 없다!! 바로 아래 자식들만 가능

item = browser.find_element(By.CLASS_NAME, "item")

# item내에 view라는 id 가진 element 가져오기
view = item.find_element(By.CSS_SELECTOR, "#id")

 
또는 CSS SELECTOR을 잘 이용하면 browser에서도 바로 가져올 수 있다.

view = browser.find_element(By.CSS_SELECTOR, '.item .view')

 

Element 내의 문자열 가져오기 : text

- element 내의 문자열을 가져오는 것이 많이 필요한데 이때 text 를 사용하면 해당 element 내의 문자열을 가져올 수 있다.

item = browser.find_element(By.CLASS_NAME, "item")

text = item.text

 

이미지 or 링크 가져오기 : get_attribute()

- 이미지는 element내의 src 라는 attribute안에 주소가 있습니다.
- 링크 또한 element 내의 href 라는 attribute 안에 주소가 있습니다.
이미지와 링크 외에도 element 내의 attribute 값을 가져오고 싶을 때는 get_attribute() 함수를 사용합니다.

item = browser.find_element(By.CLASS_NAME, "item")

link = item.get_attribute("href")
image = item.get_attribute("src")

 

클릭하기 : click()

버튼을 클릭하던가, 검색창을 클릭하는 등의 클릭 이벤트가 필요할 때가 많다. 이때는 element.click() 함수를 통해 해당 element를 클릭 할 수 있다.

search_bar = browser.find_element(By.CLASS_NAME, "search_bar")

search_bar.click()

 

값 입력하기 : send_keys()

검색창을 클릭으로 활성화 시킨뒤 검색어를 입력하고 싶을 것이다. 또는 로그인 창을 클릭하고 id를 입력하고 싶기도 할 것이다. 이런 경우 element.send_keys() 함수를 사용해서 값을 입력 할 수 있다.

search_bar = broswer.find_element(By.CLASS_NAME, "search_bar")

search_bar.click()

# "selenium" 검색어 입력
search_bar.send_keys("selenium 이란?")


- 검색어를 입력하면 Enter key를 누르고 싶을 것이다 이런 경우도 send_keys()함수를 이용 할 수 있다.

search_bar.send_keys("검색어 입니다!", Keys.ENTER)

이렇게 코드를 실행하면 search_bar에 "검색어 입니다!"를 입력후 ENTER까지 누르게 되는 것이다.

입력창(검색창, 로그인 창 등) 지우기 : clear()

- 입력 했던 것들 지우는 것도 필요하겠죠?

# 검색창
search_bar = browser.find_element(By.CLASS_NAME, 'search')

# 검색창 내용 지우기
search_bar.clear()

 

웹 브라우저 새로고침 : refresh()

브라우저 새로고침 하고 싶을 때

# 새로고침
browser.refresh()



실습하기

"백문이 불여 일타" 직접 한번 코드 구현 해봅시다
https://developerahjosea.tistory.com/entry/selenium%EC%9C%BC%EB%A1%9C-%ED%81%AC%EB%A1%A4%EB%A7%81-%ED%95%98%EA%B8%B0%EC%8B%A4%EC%8A%B5-%EC%98%88%EC%A0%9C

 

selenium으로 크롤링 하기(실습 예제)

아름다운 스프4(beautifulsoup4) 만 알고 있던 나에게 Selenium이란 라이브러리를 알아버렸다. 미쳤다. 그저 GOAT. 이말 저말 필요없이 실제로 구현 해보자. 먼저 문제를 제시하니 혹시 selenium을 알고 있

developerahjosea.tistory.com



인공지능, 데이터 사이언스 혼자서 준비 힘들다면 부트 캠프 어때요.
제가 지금 하고 있는 Upstage Ai Lab !!! 

여기서 배웠습니다. 
추천 여부는 부트 캠프 다 끝나고 후기글로 남길게요!!