Проблемы с размещением «driver.find_element_by_css_selector» в условии if с селеном

avatar
Nicolás Brevis
9 августа 2021 в 01:54
85
1
1

Я пытаюсь использовать функцию из библиотеки webdriver в условии if, но это условие ситуативное, то есть не всегда происходит. Очевидно, это дает мне ошибку, потому что в тех случаях, когда условие неверно, функция «driver.find_element_by_css_selector()» не находит элемент. Есть ли способ сделать так, чтобы мой код не зависал?

if driver.find_element_by_css_selector("#react-root > div > div > section > main > div > div > div > div > a").text() == 'Volver a Instagram.':
        return 0
    else:
        if(p == 1):
            elementName1 = driver.find_elements_by_class_name("tWeCl")
            src_url = elementName1[0].get_attribute("src")
        if(p == 2):
            elementName2 = driver.find_elements_by_class_name("tWeCl")
            src_url = elementName2[0].get_attribute("src")
Источник
vitaliis
9 августа 2021 в 04:10
1

.текст, а не текст()

pmadhu
9 августа 2021 в 05:35
0

Вы можете поместить этот блок кода в блок try, except.

Ответы (1)

avatar
lucas-nguyen-17
9 августа 2021 в 04:19
0

Вы можете изменить, чтобы найти несколько элементов find_elements_by_css_selector, он вернет список

-если размер списка = 0 --> нет элемента

-если размер списка> 0 --> найти элемент(ы), соответствующий локатору

elements = driver.find_elements_by_css_selector("#react-root > div > div > section > main > div > div > div > div > a").text() == 'Volver a Instagram.'

if len(elements) == 0:
    # action when doesn't find any elements
else:
    if elements[0].text == "Volver a Instagram.":
        the rest...
Nicolás Brevis
9 августа 2021 в 12:51
0

Моя проблема в условии первого if, что внутри не имеет большого значения, потому что код не крашится внутренними ifs

lucas-nguyen-17
9 августа 2021 в 14:01
0

Да, я понимаю, я предлагаю изменить find_element на find_elements.