[python]Selenium 等待指定了选择器的所有元素

· 收录于 2024-01-06 17:10:08 · source URL

问题详情

我有这样的东西

el = WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, "till-cap"))
)

上面代码的问题在于它不会等待所有元素,它返回 5 个而不是 12 个元素,有时元素可能或多或少,我通过在 python 中使用 time.sleep(15) 来解决此问题,等待 15 秒。但我觉得这不是解决这个问题的最佳方法。谢谢。

最佳回答

虽然此功能不是 Selenium 中的本机函数,但您可以在继续操作之前实现 lambda 函数来验证存在多少元素:

WebDriverWait(browser,10).until(lambda method: len(EC.presence_of_all_elements_located(By.CSS_SELECTOR, "till-cap")) == 12)

对于这个确切的用例,Java 具有 Selenium 原生功能,但在 Python 中,我们必须使用 lambda 方法即兴发挥。为了避免 lambda,您可以将 time.sleep() 放在 WebDriverWait 函数之后,因为其余元素通常在第一个元素之后填充:

el = WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, "till-cap"))
)
time.sleep(2)

这可以让你减少 time.sleep() 中所需的时间,但你可能需要测试几次才能看到所需的最短时间。