即使元素不存在于 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}")
我有这段代码,如果元素存在,它将打印 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}")