即使元素不存在于 Selenium Python 中,如果元素存在的条件仍然继续

Condition if element exist still continues even if the element is not existing in Selenium Python

我有这段代码,如果元素存在,它将打印 innerHTML 值:

def display_hotel(self):
    for hotel in self.hotel_data:
        if hotel.find_element(By.CSS_SELECTOR, 'span[class="_a11e76d75 _6b0bd403c"]'):
            hotel_original_price = hotel.find_element(By.CSS_SELECTOR, 'span[class="_a11e76d75 _6b0bd403c"]')
            hotel_original_price = hotel_original_price.get_attribute('innerHTML').strip().replace(' ', '')

            print(f"Original:\t\t\t{hotel_original_price}")

当我继续 运行 程序时,出现

错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"span[class="_a11e76d75 _6b0bd403c"]"}

我本来希望如果span[class="_a11e76d75 _6b0bd403c"]这个元素不存在,它应该一起跳过,为什么它仍然试图在if块下继续执行代码?我在这里遗漏了什么吗?

如果元素缺失,selenium 驱动程序会抛出异常。
为了使您的代码正常工作,您应该使用 find_elements 方法。
它 return 是与传递的定位器匹配的元素列表。
因此,如果有匹配项,列表将包含 Web 元素,而如果没有匹配项,它将 return 一个空列表,而 python 将非空列表视为布尔值 True空列表是布尔值 False.
所以你的代码可能如下:

def display_hotel(self):
    for hotel in self.hotel_data:
        if hotel.find_elements(By.CSS_SELECTOR, 'span[class="_a11e76d75 _6b0bd403c"]'):
            hotel_original_price = hotel.find_element(By.CSS_SELECTOR, 'span[class="_a11e76d75 _6b0bd403c"]')
            hotel_original_price = hotel_original_price.get_attribute('innerHTML').strip().replace(' ', '')

            print(f"Original:\t\t\t{hotel_original_price}")