Python에서 Selenium 웹 드라이버 대기 추가
이 기사에서는 Python에서 Selenium 웹 드라이버 대기를 추가하는 예를 소개합니다.
Python Selenium 웹 드라이버 대기
대부분의 웹 애플리케이션은 AJAX 기술을 사용합니다. 이로 인해 셀레늄이 웹 페이지에 나타날 때까지 텍스트를 찾을 수 없기 때문에 웹 페이지에 있는 다른 요소는 완전히 업로드되는 데 다른 시간 간격이 걸립니다.
특정 텍스트가 업로드되기 전에 일부 응용 프로그램의 웹 페이지에 나타나지 않을 수 있습니다. 이로 인해 응용 프로그램을 테스트하는 동안 오류가 발생합니다.
이 문제는 대기를 포함하여 해결할 수 있습니다. 이러한 대기는 웹 페이지에서 요소 또는 기타 작업을 검색하는 동안 유연성을 제공합니다.
Selenium 웹 드라이버는 두 가지 유형의 대기를 제공합니다. 첫 번째는 암시적 대기이고 두 번째는 명시적 대기입니다.
이 두 가지 유형의 대기에 대한 자세한 내용은 이 문서에서 설명합니다.
Selenium 웹 드라이버의 암시적 대기
느린 인터넷 또는 웹 사이트의 느린 응답으로 인해 모든 결과를 얻기 위해 몇 초 동안 기다려야 하는 상황이 있을 수 있습니다. 이 경우 암시적 대기가 가장 잘 작동합니다.
암시적 대기는 웹 드라이버가 요소를 가져올 때 모든 요소를 사용할 수 있도록 요소를 찾는 동안 특정 시간 동안 DOM을 폴링하도록 웹 드라이버에 지시합니다. 프로세스의 기본 설정은 0
입니다.
암시적 대기를 설정하면 웹 드라이버 개체의 수명 동안이 됩니다.
닫거나 다시 시작하고 대기 값을 변경하지 않고 동일한 웹 드라이버를 실행하는 한 동일한 양입니다.
웹사이트로 이동하여 10초 동안 기다린 후 아래와 같이 About Us
페이지 링크를 클릭하는 예를 살펴보겠습니다.
예제 코드:
# python
from selenium import webdriver
ChromeDriver = webdriver.Chrome()
ChromeDriver.implicitly_wait(10)
ChromeDriver.get("https://www.inventicosolutions.com/")
getElemByLink = ChromeDriver.find_element_by_link_text("About Us")
getElemByLink.click()
출력:
위의 예에서 볼 수 있듯이 페이지를 로드한 후 정확히 10초 동안 대기한 후 About Us
페이지로 이동합니다.
Selenium 웹 드라이버의 명시적 대기
명시적 대기는 특정 조건이 발생할 때까지 기다렸다가 코드에서 더 진행하도록 정의된 코드 유형입니다. 명시적 대기의 극단적인 경우는 time.sleep()
입니다.
이렇게 하면 대기 조건이 정확한 시간으로 설정됩니다.
일부 적절한 방법은 명시적인 코드를 작성하는 데 도움이 됩니다. 명시적 대기는 웹 드라이버 대기 클래스를 사용하여 달성되며 expected_conditions
와 결합됩니다.
아래와 같이 암시적 대기 대신 명시적 대기를 사용하는 예를 살펴보겠습니다.
예제 코드:
# python
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ExpectedCond
chromeDriver = webdriver.Chrome()
chromeDriver.get("https://inventicosolutions.com")
getElembyLinkText = WebDriverWait(chromeDriver, 10).until(
ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us"))
)
getElembyLinkText.click()
출력:
위에서 작성한 코드의 타임아웃 값은 10초입니다. 웹 드라이버는 Timeout Exception
을 발생시키기 전에 10초 동안 대기합니다.
응용 프로그램의 웹 페이지 주소(URL) 및 텍스트 요소는 요구 사항에 따라 지정된 코드로 작성할 수 있습니다.
웹 드라이버 대기(명시적 대기에 사용되는 도구 중 하나)에는 텍스트가 성공적으로 발견될 때까지 500밀리초마다 예상 조건
을 확인하는 기본 제공 품질이 있습니다.
Python에서 대기에 대한 예상 조건
이러한 조건은 웹 브라우저를 자동화할 때 가장 자주 사용되며 웹 드라이버에 미리 정의되어 있습니다. 이러한 조건에는 다음이 포함됩니다.
title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
다음 라이브러리를 가져와 코드에 이러한 예상 조건을 포함할 수 있습니다.
# python
from selenium.webdriver.support import expected_conditions as ExpectedCond
Python의 사용자 지정 대기 조건
위의 방법 중 어느 것도 사용자의 요구 사항을 충족하지 않는 경우 사용자 지정 대기 조건을 만들 수 있습니다. 사용자 지정 조건은 call()
메서드가 있는 클래스를 사용하여 생성됩니다.
아래와 같이 사용자 지정 조건을 만들고 프로그램을 몇 초 동안 기다리게 하는 예제를 살펴보겠습니다.
예제 코드:
# python
class ElementWithClass(object):
def __init__(self, location, className):
self.location = location
self.className = className
def __call__(self, ChromeDriver):
findElem = ChromeDriver.find_element(*self.location)
if self.className in findElem.get_attribute("class"):
return findElem
else:
return False
wait = WebDriverWait(ChromeDriver, 10)
findElem = wait.until(element_has_css_class((By.ID, "myId"), "myClass"))
이 코드는 요소가 발견되면 사용자에게 true
를 제공하고 그렇지 않으면 false
를 반환합니다.
그래서 우리는 몇 가지 예와 함께 Python에서 대기를 추가하는 다양한 방법에 대해 논의했습니다. 이 주제를 즐기고 여기에서 무언가를 배웠기를 바랍니다.
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn