상세 컨텐츠

본문 제목

12. Selenium 모듈

데이터 분석/웹 스크래핑

by 알파고제로 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 모듈 사용

 

  • 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);")

 

'데이터 분석 > 웹 스크래핑' 카테고리의 다른 글

13. XPath(XML Path Language)  (0) 2023.11.01
11. BeautifulSoup 모듈  (0) 2023.10.31
10. 정규 표현식 - 3  (0) 2023.10.30

관련글 더보기

댓글 영역