Selenium
Selenium
공부한 내용을 스스로 보기 쉽게 정리한 글입니다.
- 자동화 할 수 있는 프로그램
[ Install Selenium ]
chrome driver 다운로드
1
mv ~/Download/chromedriver /usr/local/bin
Selenium Python Package 설치
1
sudo pip3 install selenium
1. 셀레니움 사용해보기
- import
1
from selenium import webdriver
- Open Browser (Chrome Driver)
1
driver = webdriver.Chrome()
- 페이지 이동
1
driver.get(url)
- 브라우져 상에서 자바 스크립트 실행
1
driver.execute_script("window.scrollTo(300, 400)")
- 지금 control하고 있는 window 객체 확인
1
2
3main_window = driver.current_window_handle
main_window
#현재 control 하고 있는 window 의 객체를 리턴한다. - 열려 있는 전체 window 탭 모두 확인
1
2
3windows = driver.window_handles
windows
#현재 열려있는 모든 탭의 객체를 리스트 형태로 리턴한다. - 열려있는 window 탭 중, control 대상 window 로 바꾸기
1
2
3driver.switch_to_window(windows[0])
#다시 원래 열었던 창으로 돌아가기
driver.switch_to_window(main_window)
2. Alert 와 Confirm 다루기
- 웹을 자동화해서 다니다보면, Alert 창이나 Confirm 창이 의도치 않게 나올 수 있다. 이를 다루는 방법은 다음과 같다.
- Alert와 Confirm 창의 차이는,
Alert 는 확인 창 하나만 있고, Confirm은 확인과 취소가 같이 있는 창이다.
(1) Alert
- Alert 띄우기
1
2drive.switch_to_window(main_window)
drive.execute_script("alert('이게 alert 로 뜰겁니다.');") - Alert 확인 누르기
1
2alert = driver.switch_to.alert
alert.accept() - Alert 창이 있으면 확인을 누르고, 없으면 없다고 리턴하기 (예외처리)
1
2
3
4
5try:
alert = driver.switch_to.alert
alert.accept()
except:
print("alert 가 없습니다.")
(2) Confirm
- Confirm 띄우기
1
driver.execute_script("confirm('이게 Confirm 창입니다.');")
- Confirm 창 확인 누르기 or 취소 누르기
1
2
3
4
5confirm = driver.switch_to.alert
# 확인
# confirm.accept()
# 취소
confirm.dismiss()
3. 입력창에 글씨 입력하기
- 이제부터 Selenium을 통해 특정 html 의 element 에 액션을 주려면,
각종 Selector 를 사용하여 html 상의 element을 셀렉팅 하고, 해당 element 에게 액션을 주어야한다.
1 | driver.find_element_by_css_selector(nameof cssselector).send_keys("입력할 내용") |
- .find_element_by_css_selector 와
.find_elements_
by_css_selector 는 다르다.element 는 하나의 selector 만 선택하는 반면, elements 는 여러가지 element 를 셀렉팅 해서, 리스트 형식으로 Return 한다. - 따라서 이렇게 리스트 형식으로 Return 이 된 경우, List[0] 등과 같이 그 엘리먼트를 뒤에 지정해줘야된다. 즉,
1
2
3
4driver.find_element_by_css_selector(nameof cssselector)
#위는 바로 selecting 이 된것이지만,
driver.find_elements_by_css_selector(nameof cssselector)[0]
#위는 뒤에 selecting 위해 list 의 요소를 선택 해주어야한다.
4. 버튼 클릭하기
1 | # 위의 방법처럼, element 를 선택해준다. |
5. id, class, 그 외의 attribute 값을 selecting 하는 법
1 | driver.find_element_by_css_selector("name of css selector.").click() |
6. selecting 한 element 의 attribute value 를 얻는 방법
- CSS로 선택한 element에 html 태그에는 다양한 attribute 들이 있을 수 있다. 이 중
attribute의 value에 접근 하고 싶을 때는 .get_attribute()메소드를 사용할 수 있다.1
driver.find_element_by_css_selector("name of css selector").get_attribute("attribute_name")
7. element 의 위치와, 사이즈 구하기
- 스크롤을 내리거나, 엘리먼트의 위치와 크기를 알고 싶을 때 사용할 수 있다.
1
2
3
4
5element = driver.find_element_by_css_selector("name of css selector")
element.location
#element 의 좌측 상단의 위치가 pixel 단위로 x, y 값의 dictionary로 보여준다.
element.size
#element 의 size 를 height, width를 pixel 단위로 dictionary로 보여준다.