반응형
파이썬, 셀레니움 응답 기다리기
글. 수알치 오상문
다음과 같은 웹 페이지가 있다고 하자.
<!doctype html>
<meta charset=utf-8>
<title>Race Condition Example</title>
<script>
var initialised = false;
window.addEventListener("load", function() {
var newElement = document.createElement("p");
newElement.textContent = "Hello from JavaScript!";
document.body.appendChild(newElement);
initialised = true;
});
</script>
셀레님움에서 특정 요소를 가져올 때 응답 시간차이로 에러가 발생할 수 있다.
driver.navigate("file:///race_condition.html")
el = driver.find_element(By.TAG_NAME, "p")
assert el.text == "Hello from JavaScript!"
다음처럼 응답 시간 10초로 설정해서 기다릴 수 있다. (10초 이전이라도 응답이 처리된다.)
from selenium.webdriver.support.ui import WebDriverWait
def document_initialised(driver):
return driver.execute_script("return initialised")
driver.navigate("file:///race_condition.html")
WebDriverWait(driver, timeout=10).until(document_initialised)
el = driver.find_element(By.TAG_NAME, "p")
assert el.text == "Hello from JavaScript!"
다음처럼 특정 조건이 만족할 때까지 기다리는 것도 가능하다. (예; p 태그를 발견하면)
from selenium.webdriver.support.ui import WebDriverWait
driver.navigate("file:///race_condition.html")
el = WebDriverWait(driver, timeout=3).until(lambda d: d.find_element_by_tag_name("p"))
assert el.text == "Hello from JavaScript!"
다음은 id가 myDynamicElement인 요소가 올 때까지 기다린다.
driver = Firefox()
driver.implicitly_wait(10)
driver.get("http://somedomain/url_that_delays_loading")
my_dynamic_element = driver.find_element(By.ID, "myDynamicElement")
다음처럼 조건을 기다리는 최대 시간과 조건을 확인하는 조건을 정의할 수도 있다. 페이지에서 요소를 검색할 때 NoSuchElementException과 같이 기다리는 동안 특정 유형의 예외를 무시하며 기다리도록 설정할 수 있다.
driver = Firefox()
driver.get("http://somedomain/url_that_delays_loading")
wait = WebDriverWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div")))
반응형
'웹 크롤링, 스크래핑' 카테고리의 다른 글
파이썬, 셀레니움 예외 처리 (0) | 2022.07.17 |
---|---|
파이썬, 셀레니움 연속 작업 Actions 예제 (0) | 2022.07.16 |
파이썬, 셀레니움 선택된 목록에서 항목 작업하기 (select 요소) (0) | 2022.07.16 |
파이썬, 셀레니움 요소 상태, 값, 텍스트 확인 (0) | 2022.07.16 |
파이썬, 셀레니움 요소 클릭, 값 입력, 값 삭제, 단축키 입력 (0) | 2022.07.16 |