find_elements_by_css_selector没有给我任何输出,如何处理?

时间:2019-05-07 13:08:00

标签: python python-3.x selenium selenium-webdriver

我正在尝试获取列表的值。我有可能没有任何价值,但想继续其余的代码,但是失败了。如何处理列表中没有值的情况。

WebDriverWait(self.driver, 10, 0.1).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, self.e_css_project_search)))
projects = self.driver.find_elements_by_css_selector(self.e_css_project_search)
pro_flag = False

print(projects)

当我没有任何价值时,它将变为异常。

2 个答案:

答案 0 :(得分:1)

find_elements不会引发该异常,如果找不到元素,则将返回一个空列表,WebDriverWait将引发该异常,如果未找到元素,则将引发TimeoutException

您可以将其放在try except块中,也可以使用implicitly_wait代替WebDriverWait

driver.implicitly_wait(5)
projects = self.driver.find_elements_by_css_selector(self.e_css_project_search)
pro_flag = False
print(projects)
driver.implicitly_wait(0)

这将寻找至少一个元素出现在DOM中,最多5秒。

*重要的是将implicitly_wait设置为0,将其与WebDriverWait混合会导致意外行为。

答案 1 :(得分:1)

检查列表的length计数。如果长度> 0,它将打印列表。否则继续。

while(True):
  projects=WebDriverWait(self.driver, 10, 0.1).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, self.e_css_project_search)))
  if(len(projects)>0):
   print(projects)
   break
  else:
    continue