상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 셀레니움에서 동적 콘텐츠를 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
셀레니움(Selenium)은 웹 애플리케이션의 자동화를 위한 강력한 도구로, 동적 콘텐츠를 처리하는 데에도 유용합니다. 동적 콘텐츠란 페이지가 로드된 후 JavaScript를 통해 추가되거나 변경되는 콘텐츠를 의미합니다. 이러한 콘텐츠를 효과적으로 처리하기 위해서는 몇 가지 전략과 기법을 사용할 수 있습니다. 1. 명시적 대기(Explicit Waits) 사용하기 동적 콘텐츠가 로드되는 데 시간이 걸릴 수 있으므로, 명시적 대기를 사용하여 특정 요소가 로드될 때까지 기다리는 것이 중요합니다. `WebDriverWait` 클래스를 사용하여 특정 조건이 충족될 때까지 대기할 수 있습니다. ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") 특정 요소가 로드될 때까지 최대 10초 대기 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "dynamicElementId")) ) ``` 2. <a href='https://sangseek.com/sangseeks/암묵적 대기/ko'>암묵적 대기</a>(Implicit Waits) 설정하기 암묵적 대기는 WebDriver가 요소를 찾을 때까지 대기하는 시간을 설정하는 방법입니다. 이 방법은 모든 요소 검색에 적용되므로, 동적 콘텐츠가 자주 변경되는 페이지에서는 유용할 수 있습니다. ```python driver.implicitly_wait(10) 모든 요소 검색에 대해 최대 10초 대기 ``` 3. JavaScript 실행하기 동적 콘텐츠가 JavaScript에 의해 생성되는 경우, JavaScript를 직접 실행하여 필요한 데이터를 가져올 수 있습니다. `execute_script` 메서드를 사용하여 JavaScript 코드를 실행할 수 있습니다. ```python JavaScript를 통해 특정 요소의 텍스트 가져오기 element_text = driver.execute_script("return document.getElementById('dynamicElementId').innerText;") print(element_text) ``` 4. 페이지 스크롤링 동적 콘텐츠는 종종 스크롤을 통해 로드됩니다. 페이지를 스크롤하여 추가 콘텐츠를 로드할 수 있습니다. 이를 위해 JavaScript를 사용하여 페이지를 아래로 스크롤할 수 있습니다. ```python 페이지를 아래로 스크롤하여 추가 콘텐츠 로드 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") ``` 5. AJAX 요청 감지하기 동적 콘텐츠는 AJAX 요청을 통해 로드되는 경우가 많습니다. 이러한 요청을 감지하고, 요청이 완료된 후에 콘텐츠를 가져오는 방법도 있습니다. 이를 위해 `WebDriverWait`와 `EC.staleness_of`를 조합하여 사용할 수 있습니다. ```python AJAX 요청이 완료될 때까지 대기 WebDriverWait(driver, 10).until( EC.staleness_of(driver.find_element(By.ID, "loadingIndicator")) ) ``` 6. 프레임 및 팝업 처리하기 동적 콘텐츠가 iframe이나 팝업으로 로드되는 경우, 해당 프레임으로 전환해야 합니다. `switch_to.frame()` 메서드를 사용하여 프레임으로 전환할 수 있습니다. ```python 특정 프레임으로 전환 driver.switch_to.frame("frameName") ``` 7. 예외 처리 및 재시도 로직 구현하기 동적 콘텐츠를 처리할 때는 예외가 발생할 수 있습니다. 예를 들어, 요소가 로드되지 않거나, 타임아웃이 발생할 수 있습니다. 이러한 경우를 대비하여 예외 처리 및 재시도 로직을 구현하는 것이 좋습니다. ```python from selenium.common.exceptions import TimeoutException try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "dynamicElementId")) ) except TimeoutException: print("요소가 로드되지 않았습니다. 재시도합니다.") 재시도 로직 구현 ``` 결론 셀레니움을 사용하여 동적 콘텐츠를 처리하는 것은 다양한 기법과 전략을 통해 가능하며, 각 웹 페이지의 구조와 동작 방식에 따라 적절한 방법을 선택해야 합니다. 명시적 대기, 암묵적 대기, JavaScript 실행, 페이지 스크롤링, AJAX 요청 감지, 프레임 처리 및 예외 처리를 통해 동적 콘텐츠를 효과적으로 다룰 수 있습니다. 이러한 기법들을 조합하여 사용하면, 더욱 안정적이고 효율적인 웹 자동화 스크립트를 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기