Python Selenium:確保多個元素載入
透過 AJAX 處理動態載入的元素時,確認其外觀可能很困難。為了處理這種情況,我們將利用 Selenium 的 WebDriverWait 及其各種策略來確保多個元素的存在。
所有元素的可見性:
驗證所有與特定選擇器匹配的元素,我們可以使用visibility_of_all_elements_ located()條件:
<code class="python">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]") ) )</code>
等待特定數量的元素:
如果需要等待對於要載入的特定數量的元素,您可以將lambda 函數與ExpectedConditions 類別結合使用:
<code class="python">WebDriverWait(driver, 20).until( lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength) )</code>
子元素的XPath:
等待子元素父元素中的元素,而不是搜尋整個DOM,您可以使用XPath 表達式:
<code class="python">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_')]") ) )</code>
自訂等待條件:
如果您喜歡建立自己的等待條件等待條件,可以定義webdriver.support.ui.ExpectedCondition 的子類別:
<code class="python">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</code>
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>
防止DOM 中元素丟失:
來避免在查找操作後丟失當前元素,在執行等待之前將其存儲在變量中:
<code class="python">element = driver.find_element_by_css_selector('ul') WebDriverWait(element, 30).until(MoreThanOne('li'))</code>
結論:
這些技術提供了一種靈活且健壯的方法等待Selenium 中多個元素的加載。根據您的要求,選擇最適合您的用例的方法。
以上是如何確保 Python Selenium 中載入多個元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!