пытаюсь использовать continue или пройти внутри цикла 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

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


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


Ответы (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
person yakubov shimon    schedule 29.08.2020