Python Selenium: 다중 요소 로드 보장
AJAX를 통해 동적으로 로드된 요소를 처리할 때 해당 요소의 모양을 확인하는 것이 어려울 수 있습니다. 이 시나리오를 처리하기 위해 Selenium의 WebDriverWait 및 다양한 전략을 활용하여 여러 요소의 존재를 확인합니다.
모든 요소의 가시성:
특정 선택기와 일치하는 모든 요소의 경우 visible_of_all_elements_location() 조건을 사용할 수 있습니다:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
elements = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located(
(By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
)
)
특정 수의 요소를 기다리는 중:
특정 수의 요소가 로드될 때까지 기다려야 하는 경우 ExpectedConditions와 함께 람다 함수를 사용할 수 있습니다. class:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
하위 요소에 대한 XPath:
전체 DOM을 검색하는 대신 상위 요소 내의 하위 요소를 기다리려면 XPath 표현식을 사용할 수 있습니다.
WebDriverWait(driver, 20).until(
EC.presence_of_element_located(
(By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
)
)
사용자 정의 대기 조건:
자신만의 대기 조건을 생성하려는 경우 webdriver.support.ui.ExpectedCondition:
[의 하위 클래스를 정의할 수 있습니다. &&&]class MoreThanOne(webdriver.support.ui.ExpectedCondition):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1
WebDriverWait(driver, 30).until(MoreThanOne('li'))
DOM에서 요소 손실 방지:
찾기 작업 후 현재 요소를 잃지 않으려면 찾기 작업을 수행하기 전에 요소를 변수에 저장하세요. 기다리세요:element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
결론:
이러한 기술은 로드를 기다리는 유연하고 강력한 방법을 제공합니다. 셀레늄의 여러 요소. 요구 사항에 따라 사용 사례에 가장 적합한 접근 방식을 선택하세요.부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3