如何检查对象是否存在(Selenium / Python)并执行if-else

时间:2018-06-07 15:20:10

标签: python selenium

我尝试创建脚本以自动化订单输入。我在与客户搜索结果斗争中挣扎。我写了以下if语句:

# checks if there are any search results
if browser.find_element_by_css_selector("a[class='nclk']"):

    # creates variable with all search results
    searchCount = browser.find_elements_by_xpath("//a[@class='nclk']") 

    # counts search results
    searchCountCheck = len(searchCount) 
    ...

它会查找"a[class='nclk']",因为如果有任何搜索结果,则此对象存在。问题是,当没有时,它会停止脚本并显示错误消息...unable to locate element... - 它没有转到else语句,我不知道如何对它进行排序。

我知道它可以由try:完成,但问题是这两个语句中嵌套了很多语句,所以它最终会变得非常混乱。

我认为处理这个问题的最好方法是创建一个try语句来检查这个对象是否存在并且它创建变量(哪个值取决于对象的存在) - 但我不知道如何编写它以及如何将变量传递给以下if-else语句。

3 个答案:

答案 0 :(得分:1)

您可以使用:

# if result is 0, then there is no element matching.
driver.find_elements_by_css_selector('#element')  

在这种情况下,您不必添加try,因为如果没有元素,则列表的长度为0,不会抛出任何错误。在你的情况下,它将是这样的:

if (browser.find_elements_by_css_selector("a[class='nclk']")):
  searchCount = browser.find_elements_by_xpath("//a[@class='nclk']")
  searchCountCheck = len(searchCount)

答案 1 :(得分:1)

编辑:

我忘了find_elements_by_xpath()返回一个空列表或非空列表,但这个解决方案对各种find_element_by_*函数都有好处。

您可以使用try-except-else语句。例如,

try:
    searchCount = browser.find_element_by_xpath("//a[class='nclk']")
    searchCountCheck = len(searchCount)
except NoSuchElementException: 
    print("No element found. Breaking...")
except: 
    print("Generic error message.")
else:
    # Do stuff with searchCount / searchCountCheck / etc.

仅在else部分未引发任何错误时才输入try部分。

答案 2 :(得分:0)

你可以在异常后将searchCountCheck设置为0.

try:
    browser.find_element_by_css_selector("a[class='nclk']")
    searchCount = browser.find_elements_by_xpath("//a[@class='nclk']")
    searchCountCheck = len(searchCount)
    flag = 1
except NoSuchElementException:
    searchCountCheck = 0
    flag = 0
  

find_element_by_css_selector(css_selector)通过css查找元素   选择器。

     

Args:css_selector - CSS选择器字符串,例如:'a.nav #home'返回:
  WebElement - 如果找到的元素引发:
  NoSuchElementException - 如果找不到元素用法:element =   driver.find_element_by_css_selector(“#富”)