설명
chromedriver를 제어하거나 원하는 정보를 얻기 위해 사용
설치
> python -m pip install --upgrade pip
> pip install selenium
PowerShell
복사
import selenium
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
Python
복사
사전작업
크롬 버전 확인
•
chrome://version
크롬드라이버 설치
•
•
Mac의 경우
$ brew install --cask chromedriver # chromedriver 설치
$ which chromedriver # chromedirver 설치 위치 확인
$ xattr -d com.apple.quarantine <설치된 path> # mac os에 quarantine을 해제 요청
Shell
복사
메서드: 객체
webdriver.Chrome() → 크롬 브라우저 객체
•
chrome driver과 연결
driver = webdriver.Chrome()
Python
복사
★ driver.implicitly_wait(sec)
•
web_crawling을 할 때는 driver.implicity_wait()을 사용하는 게 속도/성능면에서 좋다.
driver.implicitly_wait(10)
Python
복사
◦
10초안에 웹페이지를 load 하면 바로 넘어가거나, 10초를 기다림.
•
webdriver 을 사용할 때, 컴퓨터 성능과 인터넷 환경에 따라 load 하는 시간이 다 다를 수 있다.
•
이 때 필연적으로 LOAD하는 시간을 주는 경우가 많은데 이 때 사용하는게 implicitly_wait()이다.
Selenium으로 테스트를 하거나 매크로를 만들다보면 간혹 "ElementNotVisibleException" 에러가 보일 수 있다.
이 때는 시간을 조금 더 늘려주면 해결된다.
Selenium으로 DOM요소 선택 요소를 찾지 못하면 NoSuchElementException 발생
이름 | 설명 |
find_element(By.조건) | 해당 조건에 맞는 처음 요소를 추출 |
find_elements(By.조건) | 해당 조건에 맞는 요소들을 모두 찾아 리스트로 반환 |
처음요소를 추출 | |
find_element_by_id(id) | id속성으로 요소를 하나 추출 |
find_element_by_name(name) | name 속성으로 요소를 하나 추출 |
find_element_by_css_selector(query) | css 선택자로 요소를 하나 추출 |
find_element_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에 해당하는 요소를 하나 추출 |
모든 요소를 추출(element 뒤에 s가 붙는다.) | |
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) | 링크의 자식 요소에 포함돼 있는 텍스트로 요소를 여러개 추출 |
요소 탐색 : 검색 조건 상수 활용
•
By.ID: 요소의 ID 속성을 사용하여 탐색
(예: driver.find_element(By.ID, "search_button"))
•
By.NAME: 요소의 name 속성을 사용하여 탐색
(예: driver.find_element(By.NAME, "username"))
•
By.CSS_SELECTOR: CSS 선택자를 사용하여 탐색
(예: driver.find_element(By.CSS_SELECTOR, ".btn.login"))
•
By.XPATH: XPath 표현식을 사용하여 탐색
(예: driver.find_element(By.XPATH, "//input[@type='password']"))
요소 탐색 리스트 다루기
•
find_elements(By.selector): 지정된 선택자에 해당하는 모든 요소를 리스트로 반환
•
get(index): 리스트의 특정 인덱스에 있는 요소를 가져옵니다.
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 | 요소의 내부 글자 |
요소 조작 : 주요 메서드 활용
•
click(): 버튼을 클릭합니다.
•
send_keys(text): 입력 필드에 텍스트를 입력합니다.
•
clear(): 입력 필드의 내용을 지웁니다.
•
get_attribute(attribute_name): 요소의 특정 속성값을 가져옵니다.
•
is_enabled(): 요소가 활성화되어 있는지 확인합니다.
•
text: 요소의 텍스트 콘텐츠를 가져옵니다.
* send_keys() : 특수 키 목록
from selenium.Webdriver.common.keys import Keys
SQL
복사
키 | 설명 | 키 | 설명 |
Keys.ENTER | Enter 키 | Keys.ARROW_UP | 화살표 위 키 |
Keys.BACKSPACE | Backspace 키 | Keys.ARROW_DOWN | 화살표 아래 키 |
Keys.TAB | Tab 키 | Keys.ARROW_LEFT | 화살표 왼쪽 키 |
Keys.SPACE | 스페이스바 | Keys.ARROW_RIGHT | 화살표 오른쪽 키 |
Keys.ESCAPE | Esc 키 | Keys.F1 ~ Keys.F12 | 기능 키 (F1 ~ F12) |
Keys.CONTROL | Ctrl 키 | Keys.HOME | Home 키 |
Keys.SHIFT | Shift 키 | Keys.END | End 키 |
Keys.ALT | Alt 키 | Keys.PAGE_UP | Page Up 키 |
Keys.DELETE | Delete 키 | Keys.PAGE_DOWN | Page Down 키 |
Keys.INSERT | Insert 키 | Keys.COMMAND | mac Command 키 |
* send_keys() : 조합 키 사용
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('https://www.naver.com/')
driver.implicitly_wait(3)
text_box = driver.find_element(By.ID, 'query')
search_bar.send_keys('honeybee') # "honeybee" 입력
text_box.send_keys(Keys.CONTROL + "s") # Ctrl+S 키 조합
text_box.send_keys(Keys.CONTROL + "c") # Ctrl+C 키 조합
text_box.send_keys(Keys.CONTROL + "v") # Ctrl+V 키 조합
SQL
복사
Selenium 드라이버 조작
명령어 | 설명 |
add_cookie( cookie_dict) | 쿠키값을 사전 형식으로 지정 |
back() / forward() | 이전 페이지/ 다음페이지 |
close() | 브라우저 닫기 |
current_url | 현재 url |
delete_all_cookies() | 모든 쿠키 제거 |
delete_cookie(name) | name에 해당하는 쿠키 제거 |
execute( command, params) | 브라우저 고유의 명령어 실행 |
execute_async_script( script, *args) | 비동기 처리하는 자바스크립트를 실행 |
execute_script( script, *args) | 동기 처리하는 자바스크립트를 실행 |
get(url) | 웹 페이지를 읽어들임 |
get_cookie( name) | 특정 쿠키 값을 추출 |
get_cookies() | 모든 쿠키값을 사전 형식으로 추출 |
get_log(type) | 로그 추출 (type: browser/driver/client/server) |
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 | 현재 타이틀을 추출 |