티스토리 뷰

Selenium

  • 자바스크립트를 많이 사용하는 웹 사이트(동적요소가 많은 웹사이트)는 웹 브라우저를 사용하지 않으면 동작을 제대로 확인할 수 없다.

  • selenium은 웹 브라우저를 원격 조작할 때 사용한다.

  • 웹 브라우저를 조작하는 것과 같으므로 모든 웹 페이지에서 데이터를 스크레이핑 할 수 있다.

헤드리스 파이어폭스

  • 화면이 없는 웹 브라우저

  • 명령줄에서 웹 브라우저를 조작할 수 있다.

  • 브라우저 내부에 출력되는 데이터를 추출하거나 스크린샷을 찍을 수 있다.

  • 스크레이핑, UI테스트 자동화 등에 활용

Selenium + 파이어폭스 실행 환경

  • 파이어폭스 설치

  • selenium 설치

  • 압축 해제

  • 폴더 이동

  • 한글 폰트 설치

  • 새로운 컨테이너 생성

웹 사이트를 이미지로 캡처해보기

  • 네이버 메인 화면 캡처

from selenium.webdriver import Firefox, FirefoxOptions

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

# Firefox를 헤드리스 모드로 설정하는 옵션
options = FirefoxOptions()
options.add_argument('-headless')

# PhantomJS 드라이버 추출하기 
browser = Firefox(options=options)

# URL 읽어 들이기
browser.get(url)
# 화면을 캡처해서 저장하기 
browser.save_screenshot("Website.png")
# 브라우저 종료하기
browser.quit()

  • 카페로 화면 이동 후 캡처

from selenium.webdriver import Firefox, FirefoxOptions

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

# Firefox를 헤드리스 모드로 설정하는 옵션
options = FirefoxOptions()
options.add_argument('-headless')

# PhantomJS 드라이버 추출하기 
browser = Firefox(options=options)

# URL 읽어 들이기
browser.get(url)

e = browser.find_element_by_css_selector("a[data-clk='svc.cafe']")
e.click()

# 화면을 캡처해서 저장하기 
browser.save_screenshot("Website.png")
# 브라우저 종료하기
browser.quit()

Selenium 으로 DOM 요소 선택

  • 여러 개의 요소 중 처음 찾아지는 요소 추출

메소드 설명
find_element_by_id(id) id 속성으로 요소 하나 추출
find_element_by_name(name) name 속성으로 요소 하나 추출
find_element_by_css_selector(query) css 선택자로 요소 하나 추출
find_element_by_xpath(query) xpath를 지정해 요소 하나 추출
find_element_by_tag_name(name) 태그 이름이 name에 해당하는 요소 하나 추출
find_element_by_link_text(text) 링크 텍스트로 요소 추출
find_element_by_partial_link_text(text) 링크의 자식 요소에 포함돼 있는 텍스트로 요소 하나 추출
find_element_by_class_name(name) 클래스 이름이 name에 해당하는 요소를 하나 추출
  • 모든 요소 추출

메소드 설명
find_elements_by_css_selector(query) css 선택자로 요소 여러개 추출
find_elements_by_xpath(query) xpath를 지정해 요소 여러개 추출
find_elements_by_tag_name(name) 태그 이름이 name에 해당하는 요소 여러개 추출
find_elements_by_class_name(name) 클래스 이름이 name에 해당하는 요소를 여러개 추출
find_elements_by_partial_link_text(text) 링크의 자식 요소에 포함돼 있는 텍스트로 요소 여러개 추출

Selenium으로 요소 조작

메소드 또는 속성 설명
clear() 글자를 입력할 수 있는 요소의 글자를 지움
click() 요소 클릭
get_attribute(name) 요소의 name에 해당하는 속성의 값 추출
is_displayed() 요소가 화면에 출력되는지 확인
is_enabled() 요소가 활성화돼 있는지 확인
is_selected() 체크박스 등의 요소가 선택된 상태인지 확인
screenshot(filename) 스크린샷
send_keys(value) 키 입력
submit() 입력양식 전송
value_of_css_property(name) name에 해당하는 css속성 값 추출
id 요소의 id 속성
location 요소의 위치
parent 부모 요소
rect 크기와 위치 정보를 가진 딕셔너리 자료형 리턴
screenshot_as_base64 스크린샷 base64로 추출
screenshot_as_png png형식의 바이너리로 추출
size 요소의 크기
tag_name 태그이름
text 요소 내부 글자

Selenium 드라이버 조작

메소드 또는 속성 설명
add_cookie(cookie_dict) 쿠키 값을 딕셔너리 형식으로 저장
back() / forward() 이전 페이지 또는 다음페이지로 이동
close() 브라우저 닫기
current_url 현재 url추출
delete_all_cookies() 모든 쿠키 제거
delete_cookie(name) 특정 쿠키 제거
execute(command, params) 브라우저 고유의 명령어 실행
execute_async_script(script, *args) 비동기 처리하는 자바스크립트 실행
execute_script(script, *args) 동기 처리하는 자바스크립트 실행
get(url) 웹 페이지 읽기
get_cookie(name) 특정 쿠키값 추출
get_cookies() 모든 쿠키 값 딕셔너리 형식으로 추출
get_log(type) 로그 추출
get_screenshot_as_base64() base64 형식으로 스크린샷 추출
get_screenshot_as_file(filename) 스크린샷 파일로 저장
get_screenshot_as_png() png형식으로 스크린샷 바이너리 추출
get_window_position(windowHandle='current') 브라우저 위치 추출
get_window_size(windowHandle='current') 브라우저 크기 추출
implicitly_wait(sec) 초단위로 지정하여 처리가 끝날때 까지 대기
quit() 브라우저 닫기
save_screenshot(filename) 스크린샷 저장
set_page_load_timeout(time_to_wait) 페이지를 읽는 타임아웃 시간 지정
set_script_timeout(time_to_wait) 스크립트의 타임아웃 시간 지정
set_window_position(x,y,windowHandle='current') 브라우저 위치 지정
set_window_size(width, height, windowhandle='current') 브라우저 크기 지정
title 현재 페이지 타이틀 추출
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함