#python #selenium #while-loop #continue #except
#python #selenium #цикл while #продолжить #за исключением
Вопрос:
моя программа выполняет итерацию между элементами, она нажимает на элемент, затем снова нажимает и переходит к следующему элементу. я пытаюсь заставить программу передавать элемент, если возникает ошибка.
исключения находятся внутри цикла while, код каждого элемента выглядит следующим образом:
item_1 = driver.find_element_by_id('feed_item_0')
item_1.location_once_scrolled_into_view
if item_1.is_displayed():
item_1.click()
time.sleep(2)
phone_reveal_1 = driver.find_element_by_id('phone_number_0')
contact_seller_1 = driver.find_element_by_id('contact_seller_0')
if phone_reveal_1.is_displayed():
phone_reveal_1.click()
elif contact_seller_1.is_displayed():
contact_seller_1.click()
elif not phone_reveal_1.is_displayed() or contact_seller_1.is_displayed():
continue
в конце я написал это:
except selenium.common.exceptions.NoSuchElementException:
continue
except selenium.common.exceptions.ElementClickInterceptedException:
continue
except selenium.common.exceptions.StaleElementReferenceException:
continue
итак, что делает код, когда возникает какая-либо ошибка, независимо от того, записан continue или pass, цикл начинается заново с самого начала. я просто хочу, чтобы он пропустил пункт what. я что-то упускаю?
Комментарии:
1. может быть вторым
if
может бытьelif
2. спасибо, это не сработает, потому что это новое утверждение
Ответ №1:
для всех, у кого будет такая же проблема, проблема заключалась в том, что я обработал исключения в конце. каждый блок должен иметь свое собственное исключение. код должен быть примерно таким:
try:
item_1 = driver.find_element_by_id('feed_item_0')
item_1.location_once_scrolled_into_view
if item_1.is_displayed():
item_1.click()
time.sleep(2)
phone_reveal_1 = driver.find_element_by_id('phone_number_0')
contact_seller_1 = driver.find_element_by_id('contact_seller_0')
if phone_reveal_1.is_displayed():
phone_reveal_1.click()
elif contact_seller_1.is_displayed():
contact_seller_1.click()
phone_numbers_1 = driver.find_elements_by_id('phone_number_0')
number_1 = [i.text for i in phone_numbers_1]
except NoSuchElementException:
pass