Selenium

Selenium

공부한 내용을 스스로 보기 쉽게 정리한 글입니다.

  • 자동화 할 수 있는 프로그램

[ Install Selenium ]

  1. chrome driver 다운로드

    1
    $ mv ~/Download/chromedriver /usr/local/bin
  2. 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
    3
    main_window = driver.current_window_handle
    main_window
    #현재 control 하고 있는 window 의 객체를 리턴한다.
  • 열려 있는 전체 window 탭 모두 확인
    1
    2
    3
    windows = driver.window_handles
    windows
    #현재 열려있는 모든 탭의 객체를 리스트 형태로 리턴한다.
  • 열려있는 window 탭 중, control 대상 window 로 바꾸기
    1
    2
    3
    driver.switch_to_window(windows[0])
    #다시 원래 열었던 창으로 돌아가기
    driver.switch_to_window(main_window)

2. Alert 와 Confirm 다루기

  • 웹을 자동화해서 다니다보면, Alert 창이나 Confirm 창이 의도치 않게 나올 수 있다. 이를 다루는 방법은 다음과 같다.
  • Alert와 Confirm 창의 차이는,

    Alert 는 확인 창 하나만 있고, Confirm은 확인과 취소가 같이 있는 창이다.

(1) Alert

  • Alert 띄우기
    1
    2
    drive.switch_to_window(main_window)
    drive.execute_script("alert('이게 alert 로 뜰겁니다.');")
  • Alert 확인 누르기
    1
    2
    alert = driver.switch_to.alert
    alert.accept()
  • Alert 창이 있으면 확인을 누르고, 없으면 없다고 리턴하기 (예외처리)
    1
    2
    3
    4
    5
    try:
    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
    5
    confirm = 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
    4
    driver.find_element_by_css_selector(nameof cssselector)
    #위는 바로 selecting 이 된것이지만,
    driver.find_elements_by_css_selector(nameof cssselector)[0]
    #위는 뒤에 selecting 위해 list 의 요소를 선택 해주어야한다.

4. 버튼 클릭하기

1
2
# 위의 방법처럼, element 를 선택해준다.
driver.find_element_by_css_selector("name of css selector").click()

5. id, class, 그 외의 attribute 값을 selecting 하는 법

1
2
3
4
driver.find_element_by_css_selector("name of css selector.").click()
# id 의 경우 : #idname
# class 의 경우 : .classname
# 다른 attribute 의 경우 : [attribute = 'value']

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
    5
    element = 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로 보여준다.