본문으로 바로가기

Selenium

category Python/python 2020. 11. 9. 11:15

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!')")

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

 

반응형

'Python > python' 카테고리의 다른 글

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