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

2024-06-16 11:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建脚本以便自动输入订单。我正在为客户搜索结果而挣扎。我写了以下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语句。在


Tags: 对象browser脚本searchbyifelement语句
3条回答

编辑:

我忘记了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.

只有在try部分没有抛出错误时,else部分才被输入。在

您可以使用这个:

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

在本例中,您不必添加try,因为如果没有元素,列表的长度将为0,并且不会抛出任何错误。在你的情况下应该是这样的:

^{pr2}$

您可以在发生异常后将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) Finds an element by css selector.

Args: css_selector - CSS selector string, ex: ‘a.nav#home’ Returns:
WebElement - the element if it was found Raises:
NoSuchElementException - if the element wasn’t found Usage: element = driver.find_element_by_css_selector(‘#foo’)

相关问题 更多 >