使用Python selenium处理'没有这样的元素异常'

时间:2018-02-21 16:40:10

标签: python selenium

我正在尝试在下拉列表中选择(如果存在)一年中的某个月,其中(月份)可以是从“1月”到“12月”的任何字符串(这些也是下拉列表中的元素)
 但不是每个月都必然在名单上。

Select(driver.find_element_by_id("selectMonth")).select_by_visible_text("%s" % (month))  

“selectMonth”是列表的id,可见文本根据月份命名。我创建了一个循环,我从1月到12月每月选择一次,但是当月份不在列表中时我遇到了问题(NoSuchElementException)。

在尝试选择月份之前,如何检查月份是否在下拉列表中?

在另一篇文章(Selenium "selenium.common.exceptions.NoSuchElementException" when using Chrome)中有关于NoSuchElementException的一些很好的信息,但我无法用它来解决我的问题。它是相似的,但不一样。

2 个答案:

答案 0 :(得分:2)

我认为这应该可以解决你正在尝试的问题。我将下拉列表中每个月的文本添加到列表中,它将在尝试选择循环中的当前月份之前进行检查。

MonthSelect = Select(driver.find_element_by_id("selectMonth"))
DropDownOptions = []
# seems like you have the string of each month in a list/array already so I will refer to that
for option in MonthSelect.options: DropDownOptions.append(option.text)
for month in MonthList:
    if month in DropDownOptions:
        MonthSelect.select_by_visible_text("%s" % (month)) 

编辑:

正如@Bob指出的那样,你也可以抓住Exception

from selenium.common.exceptions import NoSuchElementException

try:
    Select(driver.find_element_by_id("selectMonth")).select_by_visible_text("%s" % (month))
except NoSuchElementException:
    pass

通过这种方式,您可以每个月尝试一次,但只是通过不存在的月份。

答案 1 :(得分:0)

您可以考虑假设它是easier to ask forgiveness than permission,而不是检查元素是否存在。换句话说,只是尝试选择事物,如果失败则捕获NoSuchElementException