Вы можете использовать саму ошибку, чтобы узнать, исчез ли элемент. Вам просто нужно обработать это и разорвать цикл:
previous_value = None
while True:
try:
current_value = browser.find_element_by_xpath('//*[@class="cell progress-name text-center ng-star-inserted"]')
except NoSuchElementException: # the element wasn't found
break # exit from the loop
if previous_value:
if current_value.text != previous_value:
print(current_value.text)
previous_value = current_value.text
else:
print(current_value)
previous_value = current_value.text
time.sleep(1)
Не забудьте импортировать исключение from selenium.common.exceptions import NoSuchElementException
.
Есть еще один способ справиться с этим. Вы можете использовать find_elements_by_xpath
(с "s" в "elements"). Эта функция будет возвращать пустой список вместо броска и ошибки, если ничего не найдено.
Затем вы можете проверить, является ли список пустым и прервется ли, если True
.
previous_value = None
while True:
current_value = browser.find_elements_by_xpath('//*[@class="cell progress-name text-center ng-star-inserted"]')
if not current_value:
break # the list is empty
if previous_value:
if current_value.text != previous_value:
print(current_value.text)
previous_value = current_value.text
else:
print(current_value)
previous_value = current_value.text
time.sleep(1)
Я думаю, что лучший вариант - первый , который я вам дал, он чище и использует принцип Python из Глоссария :
Проще спроситьпрощение, чем разрешение. Этот общий стиль кодирования Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается ложным. Этот чистый и быстрый стиль характеризуется наличием множества попыток и исключений.