데이터 분석/웹 스크래핑

[Web Scrapping] Selenium 모듈

eunnys 2023. 11. 1. 11:52

Selenium 모듈 정의

  • 웹 어플리케이션 테스트를 위한 프레임워크
  • 다양한 언어에서 지원하며 사용자가 아닌 프로그램이 웹 브라우저를 제어할 수 있도록 지원
  • 웹 브라우저마다 클라이언트 프로그램(Web Driver)이 별도로 필요
  • 크롤링보다는 웹을 제어하는 목적이 더 큼

 

 

 Selenium 모듈 설치

- pip install selenium

 

 

Web Driver 설치

- 컴퓨터 운영체제와 웹 브라우저 종류에 따라 구분하여 설치

 

① 크롬 웹 드라이버 : https://chromedriver.chromium.org/downloads 

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading. For older versions of Chrome, please se

chromedriver.chromium.org

 

② 엣지 웹 드라이버 : https://docs.Microsoft.com/ko-kr/Microsoft-edge/webdriver 

 

Legacy Microsoft Edge developer documentation - Legacy Microsoft Edge developer docs

Legacy Microsoft Edge developer documentation and content for Microsoft Edge (EdgeHTML).

learn.microsoft.com

 

③ 파이어폭스 웹 드라이버 : https://github.com/mozilla/geckodriver/releases 

 

Releases · mozilla/geckodriver

WebDriver for Firefox. Contribute to mozilla/geckodriver development by creating an account on GitHub.

github.com

 

 

HTML 정보 읽기

  • find_elements() : 해당하는 조건을 모두 검색하여 리스트로 반환
  • find_element() : 해당하는 조건 중에 가장 먼저 검색된 것을 선택
  • by 속성 : 검색 기준 지정 (by 클래스의 상수로 지정)
  • value 속성 : 태그 이름 지정

 

by 속성 설명
By.ID 태그의 id 가뵤으로 추출
By.NAME 태그의 from name 값으로 추출
By.XPATH 태그의 경로로 추출
By.LINK_TEXT 링크 텍스트 값으로 추출
By.PARTIAL_LINK 링크 텍스트의 자식 텍스트 값을 추출
By.TAG_NAME 태그 이름으로 추출
By.CLASS_NAME 태그의 클래스 이름으로 추출
By.CSS_SELECTOR css 선택자로 추출

 

 

이벤트 제어

- selenium은 브라우저를 직접 제어하기 때문에 마우스 클릭, 키보드 입력, 자바스크립트 등 이벤트 처리를 할 수 있다.

 

함수 설명
click() 마우스 클릭
send_keys() 키보드 입력
execute_script() 자바스크립트 삽입
submit() 입력 양식 전송
screenshot(파일이름) 스크린샷
clear() 글자 지움
back() 뒤로 가기
forward() 앞으로 가기

 

- 키보드를 제어할 때 특수 키를 입력하기 위해 Keys 모듈 사용

 

http://m.webdriver.common.keys

  • from selenium import Keys
  • 특수 키 상수 목록

 

ARROW_DOWN,  ARROW_LEFT,  ARROW_RIGHT,  ARROW_UP, BACKSPACE, DELETE, HOME, END, 
INSERT, ALT, COMMAND, CONTROL, SHIFT, ENTER, ESCAPE, SPACE, TAB, F1, F2 .... F12

 

- selenium은 웹 드라이버로 브라우저를 직접 띄우고 제어하기 때문에 상대적으로 로딩이 오래 걸리는 단점이 있다.

- 많은 작업을 한번에 처리하는 경우 처리 속도를 따라가지 못해 오류 발생 가능

- 따라서 time 모듈의 sleep 함수와 함께 사용하여 조금씩 시간차를 두고 실행하는 것을 권장

 

# 로그인 버튼 클릭
time.sleep(1)
element = driver.find_element_by_class_name('btn_global')
element.click()

# 등록안함 버튼 클릭
time.sleep(1)
element = driver.find_element_by_id('new.dontsave')

 

 

 이벤트 제어 (동적 스크롤링)

  • 웹 브라우저 화면 스크롤을 통해 지속적으로 노출되는 콘텐츠 스크랩핑 가능
  • 웹 브라우저 드라이버 객체의 execute_script() 함수를 통해 스크롤을 제어하는 자바스크립트 코드를 실행

 

# 스크롤 바의 전체 높이 반환
driver.execute_script('return document.body.scrollHeight')

# 윈도우 창을 0에서부터 가장 밑(scrollHeight)까지 이동
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')