目前我使用隐式等待来定位元素,然后才对它们发出任何操作。请参阅隐式等待的示例:
WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))
这在处理单个元素时工作正常。但是,如果xpath与多个元素相关,那么EC.presence_of_element_located()
将会超时。我的问题是,我如何隐式等待多个元素?
单个元素 -
WebDriverWait(browser,10).until(EC.presence_of_element_located(By.XPATH(('xpath')))
browser.find_element_by_xpath('xpath')
多元素 -
??
browser.find_elements_by_xpath('xpath')
注意:请注意在多个元素实例中使用find_elements_by_xpath()
而不是find_elements_by_xpath()
答案 0 :(得分:5)
这里的问题是单个项目更简单。它只需要等到你的定位器返回一个或多个元素。
当您处理多个元素时,WebDriver可能无法知道等待多长时间,因为它不知道您希望在那里有多少元素。
因此,您必须使用明确的等待。
在这个明确的等待中,你应该:
find_elements_by_path
答案 1 :(得分:5)
我迟到了两年但是我想张贴这个,以防有人像我一样在谷歌上搜索。你可以使用
WebDriverWait(browser, 10).until(
EC.presence_of_all_elements_located((By.XPATH, 'xpath'))
)
这将返回所有这些。你不需要做
browser.find_element_by_xpath('xpath')
明确等待后因为WebDriverWait(browser,10).until(...)
将返回您正在等待的元素。