데이터 분석/웹 스크래핑
12. Selenium 모듈
알파고제로
2023. 11. 1. 08:50
■ selenium 모듈 정의
- 웹 어플리케이션 테스트를 위한 프레임워크
- 다양한 언어에서 지원하며 사용자가 아닌 프로그램이 웹 브라우저를 제어할 수 있도록 지원
- 웹 브라우저마다 클라이언트 프로그램(Web Driver)이 별도로 필요
- 크롤링보다는 웹을 제어하는 목적이 더 큼
■ selenium 모듈 설치
- pip install selenium
■ Web Driver 설치
- 컴퓨터 운영체제와 웹 브라우저 종류에 따라 구분하여 설치
■ HTML 정보 읽기
- find_elements(): 해당하는 조건을 모두 검색하여 리스트로 반환
- find_element(): 해당하는 조건 중에 가장 먼저 검색된 것을 선택
- by 속성: 검색 기준 지정 (By 클래스의 상수로 지정)
- value 속성: 태그 이름 지정
by 속성 | 설명 |
By.ID | 태그의 id 값으로 추출 |
By.NAME | 태그의 form 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 모듈 사용
- from seleniuhttp://m.webdriver.common.keys import Keys
- 특수키 상수 목록
- 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);")