【问题标题】:Condition if element exist still continues even if the element is not existing in Selenium Python即使元素在 Selenium Python 中不存在,如果元素存在的条件仍然继续
【发布时间】:2022-01-16 08:15:03
【问题描述】:

我有这段代码,如果元素存在,它将打印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 块下它仍然试图继续执行代码?我在这里有什么遗漏吗?

【问题讨论】:

  • 只需使用 try 和 except 来捕获错误。
  • 你会在 except 块中编写什么代码?写pass可以吗?
  • 可以这样做或继续。

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


【解决方案1】:

如果元素丢失,硒驱动程序会抛出异常。
为了使您的代码正常工作,您应该使用find_elements 方法。
它返回与传递的定位器匹配的元素列表。
因此,如果有匹配项,则列表将包含 web 元素,而如果没有匹配项,它将返回一个空列表,而 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}")

【讨论】:

  • 这行得通。只是一个后续问题,当我使用 find_elements 时,它似乎在跳过循环中的非退出元素之前搜索整个元素/文档(不完全确定)
  • 我不确定我是否理解你的问题,对不起
  • 让我换个说法,我的意思是它需要相当长的时间才能跳过循环,例如,如果元素 span[class="_a11e76d75 _6b0bd403c"] 不存在,则需要几秒钟才能继续通过下一个循环迭代。但如果span[class="_a11e76d75 _6b0bd403c"] 存在,则可以快速(即时)进入下一个循环迭代。
  • 您是否在代码中定义了driver.implicitly_wait()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多