首页 > 解决方案 > 预期条件 WebDriverWait Python Selenium 问题

问题描述

所以我正在填充一个元素列表,然后我遍历列表中的每个元素。如何实现等待条件来告诉代码在找不到元素之前等待 15 秒?具体来说,我希望currentpricetitle尝试等待直到元素可见,而不是在遇到该代码行时硬执行。

elements = driver.find_elements_by_css_selector('div.list-wrap div.item-container')
print(len(elements))

for x in range(len(elements)):
    
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'div.list-wrap div.item-container')))
    elements = driver.find_elements_by_css_selector('div.list-wrap div.item-container')
    currentprice = elements[x].find_element_by_css_selector('li.price-current').text
    title = elements[x].find_element_by_css_selector('a.item-title').text
...

我尝试了以下方法,但我收到 WebDriverWait 不是元素方法的错误。

elements[x].WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'li.price-current')))

标签: pythonseleniumselenium-webdriver

解决方案


你很亲密。WebDriverWait期望驱动程序实例作为第一个参数。该WebElement对象在其实例中具有驱动程序对象,并且还实现了大多数 WebDriver 方法。

考虑到这一点,您可以创建一个新WebDriverWait元素并传递您的元素而不是驱动程序。

代替:

elements[x].WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'li.price-current')))

利用:

WebDriverWait(elements[x], 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'li.price-current')))

推荐阅读