코드-편집중-모니터
코딩

셀레니움을 사용하다 보면 원하는 태그가 없어서 에러 나는 경우가 있습니다. 이럴 때 이 태그가 있는지 확인하고 이후 동작을 하면 좋은데요. 태그는 있지만 페이지 로딩이 안 된 경우도 있습니다. 이를 체크하기 위한 if문을 생각하게 되는데요. 셀레니움 if문 사용하는 방법을 알아보겠습니다.

 

 

1. 예외 처리

가장 먼저 생각하는 방법은 그냥 예외처리르 하는 것입니다. 에러가 발생하지는 않지만, 태그가 없는 경우가 아닌 에러도 통과하게 된다는 단점이 있습니다. 특정 예외를 지정하는 방법도 있지만 isDiplayed함수를 이용하면 더 깔끔하게 작성할 수 있습니다.

 

웹페이지의 특정 위치를 찾는 방법은 이전에 포스팅한 내용을 참고하시기 바랍니다.

try:
   browser.find_element(By.CLASS_NAME, 'p.item')
except:
   pass

 

2. isDisplayed 함수 이용

이 함수를 이용하면 해당 태그의 유무가 불리언 값으로 전달됩니다. 그 값에 따라 이후 분기 처리를 하면 됩니다.

is_display = browser.find_element(By.CLASS_NAME, 'p.item').is_displayed()

 

혹시 해당 함수가 없다고 나오면 버전에 따라 함수명이 조금 다를 수 있습니다. 그런 경우에는 dir이나 help함수를 이용해서 함수명을 확인하시면 됩니다.

 

 

3. 페이지 로딩에 시간이 걸리는 경우

sleep함수나 태그를 찾는 행위를 여러 번 할수도 있지만 WebdriverWait 함수를 이용하면 편리합니다. WebdriverWait는 미리 정의된 조건이 성공할 때까지 입력된 초만큼 기다립니다. 시간이 지나면 TimeoutException을 발생하고 종료됩니다. 이를 사용하기 위해서는 조건을 먼저 만들어야 하는데요.

태그가 있는지 여부는 아래와 같이 만들 수 있습니다. 그 외에도 클릭이 가능한지 여부 등 여러 가지 조건을 지정할 수 있습니다.

from selenium.webdriver.support import expected_conditions as EC

ec = EC.presence_of_element_located((By.CLASS_NAME, 'p.item'))

 

다음 이 조건을 넣어서 WebdriverWait함수를 만들면 됩니다.

from selenium.webdriver.support.ui import WebDriverWait

tag = WebDriverWait(driver, 10).until(ec)

 

이제 10초 동안 태그가 있는지 확인하고, 10초가 지나면 에러가 발생합니다.

 


셀레니움에서 if문 사용하는 방법을 알아보았는데요. 기능이 많아 urllib과 beautifulsoup을 이용하는 것도 편리하네요. 다음에도 유용한 기능 정리해서 포스팅하겠습니다. 또 찾아주세요. 감사합니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기