본문으로 바로가기

Selenium

category Pythonpython 4년 전

Selenium

 : 웹 브라우저를 컨트롤하여 웹 자동화 하는 도구 중의 하나

 : UI 자동화 시스템을 사용할 때 많이 사용하는 것 중 하나

 

자동화의 종류

 : 가장 원초적인 자동화는 화면의 좌표를 기준으로 한 자동화

   - 많이 사용되지 않음

 : Selenium 도구를 이용하는 웹 자동화

 : 윈도우즈의 자동화

 : 작업의 자동화

 

웹 드라이버의 구성

 : WebDriver.Firefox 파이어폭스

 : WebDriver.Chrom - 크롬

 : WebDriver.Ie - 익스플로러

 : WebDriver.Opera - 오페라

 : WebDriver.PhantomJS - PhantomJS 브라우저 (CLI 형식의 브라우저)

 

 

Selenium Client 설치

pip install selenium

 

 

PhantomJS 다운로드

 : 사이트 접속

http://phantomjs.org/

 

: 하단의 Install 클릭

 

 : 본인의 운영체제 버전에 맞는 파일 다운

 

 : bin 폴더에 phantomjs.exe 파일이 있는지 확인

 

 

Chrome 드라이버 설치

https://sites.google.com/a/chromium.org/chromedriver/downloads

 

 : 크롬 > 설정 > Chrome 정보에서 버전 확인

 

 : 본인 버전에 맞는 버전 클릭

 

: 본인의 운영체제에 맞게 드라이버 다운

 

Firefox 드라이버 설치 (사용하실 분만)

https://github.com/mozilla/geckodriver/releases

 

 

Selenium 사용법

from selenium import webdriver
browser = webdriver.Chrome('크롬 드라이버가 있는 경로')
browser = webdriver.PhantomJS('PhantomJS 드라이버가 있는 경로')

 

Selenium으로 DOM 요소를 선택하는 방법

 : 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에 해당하는 요소를 하나 추출한다.

 

 : DOM 내부에 있는 여러 개의 쇼로들을 모두 추출하는 메소드

메소드
find_elements_by_css_selector
find_elements_by_xpath(query)
find_elements_by_tag(name)
find_elements_by_class_name(name)

 

 : 위의 메소드를 이용해서 어떠한 요소도 찾지 못하는 경우에 발생하는 예외

NoSuchElementException

 

 : DOM 요소에 적용할 수 있는 메소드/속성들

메소드 설명
clear() 글자를 입력할 수 있는 요소의 글자를 지운다
click() 요소를 클릭한다
get_attribute(name) 요소의 속성 중에 name에 해당되는 속성의 값을 추출한다
is_displayed() 요소가 화면에 출력되는지 확인한다
is_enabled() 요소가 활성화 되었는지 확인한다
is_selected() 체크박스 드의 요소가 선택 상태인지 확인한다
screenshot(filename) 화면을 캡처해서 filename으로 저장한다
send_key(value) 키를 입력한다. 일반적으로 text 데이터를 보낸다

 

   - value가 텍스트 데이터가 아닌 경우 (특수키 : 방향키, 펑션키(f1, f2, f3, ..., f12 ), Enter, Tab, Control, ... )

# 즉, 특수키를 사용해야 하는 경우에는 별도의 모듈을 사용해야 한다.
from selenium,Webdriver.common.keys 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 / F3 / ... / F12

 

메소드 설명
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 요소 내부의 글자

 

 

 : PhantomJS용 메소드와 속성

메소드 설명
add_cookie(cookie_dict) 쿠키 값을 딕셔너리 형식으로 지정
back()/ forward() 이전 페이지 또는 다음 페이지로 이동
close() 브라우저를 닫다
current_url 현재 URL을 추출한다.
 
delete_all_cookies() 모든 쿠키를 제거한다.
delete_cookie(name) 특정 쿠키를 제거한다.
get_cookie(name) 특정 쿠키를 읽는다.
get_cookies() 모든 쿠키 값을 추출한다.
   
execute(command, params) 브라우저의 고유 명령어를 실행
get(url) 웹 페이지를 읽어들인다.
get_screenshot_as_file(filename) 스크린샷을 파일로 저장
get_screenshot_png PNG형식으로 스크린샷의 바이너리 추출
save_screenshot(filename) 스크린샷을 저장
   
implicitly_wait(sec) 최대 대기시간을 초 단위로 지정해서 처리가 끝날 때까지 대기
quit() 드라이버를 종료시켜서 브라우저를 닫는다
title 현재 페이지의 타이틀을 추출

 

 

PhantomJS 사용

from selenium import webdriver
url = "http://www.naver.com/"
# PhantomJS 드라이버 추출
driver = webdriver.PhantomJS('D:\SeleniumDriver/phantomjs-2.1.1-windows/bin/phantomjs')
driver.implicitly_wait(3) # 드라이버를 초기화될 때까지 3초간 대기
driver.get(url)
driver.save_screenshot("naver.png")
driver.quit()

 

 : naver.png 파일로 이미지 파일 저장되어 있는지 확인

 

 : execute_script() 메소드를 이용한 자바스크립트 처리하기

from selenium import webdriver
driver = webdriver.PhantomJS('D:\SeleniumDriver/phantomjs-2.1.1-windows/bin/phantomjs')
driver.implicitly_wait(3)
driver.get("https://google.com")
res = driver.execute_script("return 10+10")
print(res)

 

Chrome Driver 사용

from selenium import webdriver
driver = webdriver.Chrome('D:\SeleniumDriver/chromedriver_win32/chromedriver')
driver.implicitly_wait(3)
driver.get("http://www.naver.com/")
driver.execute_script("window.alert('Hello!! Selenium!')")

 : 네이버 창이 자동으로 뜨면서 스크립트로 설정해놓은 알림창이 뜸

 

반응형

Pythonpython카테고리의 다른글

WEB 데이터 형식  (0) 2020.11.13
Web site 경로를 따라가 데이터 찾기  (0) 2020.11.06
Python을 이용한 데이터 시각화  (0) 2020.11.03
예외 처리 사용하기  (0) 2020.10.20
클래스 상속 사용하기  (0) 2020.10.19