Python

[Python] Selenium 사용법 정리

Yukart 2023. 9. 18. 20:27
반응형

find_element

  • 가장 많이 사용하기도 하고 크롤링 중 항상 첫 시작을 알리는 find_element() 함수 입니다.
# html 태그 id 값
button = myDriver.find_element(By.ID, "button")
# html 태그 class_name
button = myDriver.find_element(By.CLASS_NAME, "button")
# html 태그 xpath (전체 경로)
button = myDriver.find_element(By.XPATH, "/html/body/div[3]/form/section/div/div[2]/div[6]/div[2]")

저는 위 3개를 가장 많이 사용합니다.

위 3가지 방법을 지금까지 소규모 크롤링 토이 프로젝트를 몇 가지 해보고 나서 느낀 몇가지 특징점이 있습니다.


By.ID

  • 자신이 크롤링 하는 html 소스 중 ID 값이 규칙성 있게 잘 구성 되어 있다면 가장 신뢰도가 가는 방법입니다. 보통 ID 값은 자주 변경될 확률이 가장 적기 때문입니다.
  • 또한 XPATH 대비해서 값이 비교적 간단하기 때문에 코드 상으로 보기 좋습니다.

By.CLASS_NAME

  • 두 번째로 신뢰도가 높은 값 중에 하나입니다. 마찬가지로 CLASS_NAME이 변경 될 확률이 두 번째로 적기 때문입니다.
  • 마찬가지로 값이 비교적 간단하기 때문에 코드 상으로 정리하기 간편합니다.

By.XPATH

  • 사용할 때 마다 고민이 가장 많이 되는 방법입니다. html 상 절대 경로와 같은 개념이기 때문에 부모 div 하나만 없어지거나 새로 교체가 되더라도 값 변동 확률이 상당히 높습니다. 하지만 ID, CLASS_NAME 에 공백이 포함되어 있다거나, 아예 값이 존재하지 않을 경우에만 사용하고 있습니다.
 사실 자신이 크롤링 하고자 하는 페이지에 따라 변동 가능성은 확연히 차이가 있기 때문에 이 방법도 무작정 위험하다고는 할 수 없습니다. 어디까지나 개인적인 생각들이고 내가 어떤 페이지를 크롤링 할 것인가를 계속 염두에 두고 개발을 해야한다고 생각합니다.

WebElement

# 클릭
button.click()
# send key (특수 키)
button.send_keys(Keys.Enter)
# send key (문자열)
button.send_keys("Myid")
# 내용 지우기
button.clear()
# dom에서 값 찾기 (내용)
button.get_attribute("innerHTML")

click()

  • 해당 엘리먼트를 찾고 click 이벤트를 발생시키는 메소드 입니다.

send_keys()

  • 해당 엘리먼트를 찾고 특정 값을 보내거나 상호작용을 합니다.

clear()

  • 값을 지웁니다.

get_attribute()

  • dom 에 접근해서 값을 가져옵니다.
  • 대표적으로 내용(innerHTML) 클래스(class) 아이디(id) 값 등

WebDriverWait

# 해당 element가 활성화 될 때 까지 기다렸다가 상호작용을 하는 메소드
waitDriver = WebDriverWait(myDriver, 10).until(expected_conditions.element_to_be_clickable(agreeViewButton))
waitDriver.click()
  • 크롤링을 하다보면 페이지 로딩이 느리거나 혹은 다른 이유로 아직 활성화 되지 않는 element와 상호작용을 하려고 메소드를 실행할 때 Exception 에 노출되곤 합니다. 따라서 필자는 특별한 경우가 아니라면 이 방법을 애용하려 합니다.

Alert

# Alert 확인
Alert(mydriver).accept()
# Alert 닫기
Alert(mydriver).dismiss()

accept()

  • 크롤링을 하다보면 예기치 못한 팝업이나 Alert이 괴롭힙니다. 이 때 Alert을 확인하는 메소드 입니다.

dismiss()

  • Alert을 닫습니다

time

# 대기 시간
time.sleep(3)

sleep()

  • Selenium 에 포함 되어있는 구현체는 아니지만 크롤링을 하다보면 필연적으로 사용할 수 밖에 없는 메소드 입니다.
  • 크롤링 하다가 너무 무분별 하게 쓰여서 코드 중간 중간 time.sleep()이 도배되어 있는게 신경쓰여서 좋은 방법을 강구하는 중입니다.
반응형

'Python' 카테고리의 다른 글

Pandas IO File Format  (0) 2022.03.27
Pandas map, apply 예제  (0) 2022.02.16
Pandas 결측치 예제  (0) 2022.02.16
Pandas 데이터 타입  (0) 2022.02.16