пытаюсь использовать continue или передать внутри цикла while, но, похоже, это не работает selenium

#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