Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: yakubov shimonОтветов: 1

моя программа выполняет итерацию между элементами, она щелкает элемент, затем снова щелкает и переходит к следующему элементу. Я пытаюсь заставить программу передать элемент, если возникает ошибка.

исключения находятся внутри цикла 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

Итак, что делает код, так это то, что когда возникает какая-либо ошибка, независимо от того, написано ли продолжение или проход, цикл начинается снова с самого начала. Я просто хочу, чтобы он пропустил пункт что. я пропал?

  • может быть второй if может быть elif Umutambyi Gad 29.08.2020
  • спасибо, это не сработает, потому что это новое утверждение yakubov shimon 29.08.2020

pythonwhile-loopseleniumexceptcontinue

Ответы

Ответ 1 · yakubov shimon

для всех, у кого будет такая же проблема, проблема заключалась в том, что я обработал исключения в конце. каждый блок должен иметь свое собственное исключение. код должен быть таким:

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы