Search

selenium

대분류
라이브러리
소분류
Python Module
유형
DOM요소 조작
주요 레퍼런스
https://donghodazzi.tistory.com/306
https://coding-shop.tistory.com/286
모듈 분류
외장
최종 편집 일시
2024/10/27 15:31
생성 일시
2024/07/22 01:05
13 more properties

설명

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
현재 타이틀을 추출