Попытка найти элемент на веб-сайте с использованием селена, но если еще условие не работает

Я пытаюсь найти некоторые элементы на веб-сайте, если нахожу, мне нужно напечатать check_1 или check_2, а если нет, напечатать никто. Но я застрял в условии if else, поскольку условие if-else не работает. мой код:

try:
    if driver.find_element_by_css_selector('div.hero__media'):
        sheet.cell(row=i, column=4).value = 'grid'
        print('grid')

    elif driver.find_elements_by_css_selector('div.flexigrid--no-sublinks.flexigrid--4-2up'):
        sheet.cell(row=i, column=4).value = 'banner'
        print('banner')
    else:
        raise Exception('This is the exception you expect to handle')
except Exception as error:
    sheet.cell(row=i, column=4).value = 'none'
    print('none')

Последнее еще вызывает ручное исключение, поэтому, если я не могу найти элемент, к которому он пойдет, кроме. Изменить 1: я попытался изменить условие с if на if else, теперь снова второе условие не работает, что-то не так с if else. Редактировать1_Код:

    if driver.find_element_by_css_selector('div.flexigrid--no-sublinks.flexigrid--4-2up'):
        sheet.cell(row=i, column=4).value = 'grid'
        print('grid')
    elif driver.find_elements_by_css_selector('div.hero__media'):
        sheet.cell(row=i, column=4).value = 'banner'
        print('banner')
    else:
        raise Exception('This is the exception you expect to handle')
except Exception as error:
    sheet.cell(row=i, column=4).value = 'none'
    print('none')```

вы можете изменить driver.find_elements_by_css_selector на driver.find_element_by_css_selector в состоянии elif и попробовать

NarendraR 15.03.2019 14:45

@NarendraR пробовал, все еще не работает. не принимает если еще условие

Shashank Sahu 15.03.2019 15:29

Вы имеете в виду, что вы проверяете, присутствует ли флажок на веб-странице?

NarendraR 15.03.2019 15:31
button =driver.find_element_by_css_selector('div.hero__media') //To check button is present on page if (len(button)>0):
NarendraR 15.03.2019 15:32

Проблема здесь в том, что мой if else не работает, поэтому все, что я вставил, if else не работает. Я переключил условие if с условием if else, и условие if else работало

Shashank Sahu 15.03.2019 15:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
112
2

Ответы 2

Попробуйте подсчитать длину и проверьте, работает ли он.

if len(driver.find_elements_by_css_selector('div.hero__media'))>0:
            sheet.cell(row=i, column=4).value = 'grid'
            print('grid')

        elif len(driver.find_elements_by_css_selector('div.flexigrid--no-sublinks.flexigrid--4-2up'))>0:
            sheet.cell(row=i, column=4).value = 'banner'
            print('banner')
        else:
            raise Exception('This is the exception you expect to handle')


    except Exception as error:
        sheet.cell(row=i, column=4).value = 'none'
        print('none')```
last else is throwing manual exception so if I can't find the element it will go to except.

Все еще не работает, я не знаю почему, но это не будет условием if else после сбоя в условии if.

Shashank Sahu 15.03.2019 13:38

Вы можете использовать find_elements, получить размер и проверить, не равен ли он 0:

value = 'none'
if len(driver.find_elements_by_css_selector('div.hero__media')) > 0:
    value = 'grid'

elif len(driver.find_elements_by_css_selector('div.flexigrid--no-sublinks.flexigrid--4-2up')) > 0:
    value = 'banner'

print(value)
sheet.cell(row=i, column=4).value = value

Проблема в вашем коде в том, что если первый элемент не существует, Selenium выбрасывает NoSuchElementException и пропускает другой код. Упасть на except часть и никогда не ходить на elif.

Вы также можете проверить здесь, как проверить, существует ли элемент.

Зачем мне проверять длину? Я просто хочу знать, присутствует ли элемент (из «селектора CSS») на веб-сайте или нет.

Shashank Sahu 15.03.2019 15:32

Проверка длины элементов поиска дает вам, сколько элементов существует в DOM, 0 означает, что не существует.

Sers 15.03.2019 16:00

Другие вопросы по теме