Selenium
: 웹 브라우저를 컨트롤하여 웹 자동화 하는 도구 중의 하나
: UI 자동화 시스템을 사용할 때 많이 사용하는 것 중 하나
자동화의 종류
: 가장 원초적인 자동화는 화면의 좌표를 기준으로 한 자동화
- 많이 사용되지 않음
: Selenium 도구를 이용하는 웹 자동화
: 윈도우즈의 자동화
: 작업의 자동화
웹 드라이버의 구성
: WebDriver.Firefox 파이어폭스
: WebDriver.Chrom - 크롬
: WebDriver.Ie - 익스플로러
: WebDriver.Opera - 오페라
: WebDriver.PhantomJS - PhantomJS 브라우저 (CLI 형식의 브라우저)
Selenium Client 설치
pip install selenium
PhantomJS 다운로드
: 사이트 접속
: 하단의 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 |