■ 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);')
'데이터 분석 > 웹 스크래핑' 카테고리의 다른 글
[Web Scrapping 실습] Selenium (0) | 2023.11.01 |
---|---|
[Web Scrapping 실습] BeautifulSoup (0) | 2023.11.01 |
[Web Scrapping] BeautifulSoup 모듈 (0) | 2023.10.31 |
[Web Scrapping] DOM (Document Object Model) (0) | 2023.10.31 |
[Web Scrapping] 정규 표현식 (0) | 2023.10.30 |