Selenio en Python Cómo usar un código If – else si un elemento no está presente

Todos, necesito algunos ejemplos serios “tontos” de cómo escribir código en Python que hará algo si hay un elemento allí o no. Soy nuevo en progtwigción y he revisado un día de publicaciones y parece que no puedo resolverlo …

Esto es lo que estoy tratando de hacer.

from selenium.common.exceptions import NoSuchElementException, staleElementReferenceException elem = driver.find_element_by_partial_link_text('Create Activity') print("Searching for Create Activity.") if elem.is_displayed(): elem.click() # this will click the element if it is there print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") else: print ("NO LINK FOUND") 

Por lo tanto, siempre que exista un ENLACE presente que sea element_by_partial_link_text (‘Crear actividad’)

Obtengo la respuesta correcta … Buscando Crear actividad. ENCONTRADO EL ENLACE CREAR ACTIVIDAD! ¡Y lo pinché!

Mi problema es cuando NO hay un enlace que element_by_partial_link_text('Create Activity')

No entiendo lo que esperaría que estuviera en mi otra statement. print ("NO LINK FOUND")

Yo obtengo …

Seguimiento (última llamada más reciente): Archivo “”, línea 1, en Archivo “C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, línea 341 , en find_element_by_partial_link_text devuelva self.find_element (by = By.PARTIAL_LINK_TEXT, value = link_text) Archivo “C: \ Program Files (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, línea 745, en find_element {‘using’: by, ‘value’: value}) [‘value’] Archivo “C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py “, línea 236, ejecute self.error_handler.check_response (respuesta) Archivo” C: \ Archivos de progtwig (x86) \ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py ” , línea 194, en check_response raise exception_class (message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Mensaje: no hay tal elemento: No se puede ubicar el elemento: {“method”: “texto de enlace parcial”, “selector parcial”: ” Crear actividad “}

¿Cómo obtengo selenium dentro de Python para activar esta excepción o error para no detener mi script y simplemente procesar la statement ELSE ?

Gracias,

Puedes atrapar la excepción y actuar en consecuencia:

 try: elem = driver.find_element_by_partial_link_text('Create Activity') if elem.is_displayed(): elem.click() # this will click the element if it is there print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") except NoSuchElementException: print("...") 

Además, probablemente modificaría la prueba para asegurarme de que el elemento sea realmente “seleccionable”:

 if elem.is_displayed() and elem.is_enabled(): 

find_element devuelve un elemento o lanza NoSuchElementException , así que para determinar la mejor forma de determinar si el elemento está presente con una condición, debe intentar usar find_elements lugar de capturar una excepción porque devuelve una lista de WebElement o una lista vacía, así que simplemente verifique su longitud como sigue: –

 elems = driver.find_elements_by_partial_link_text('Create Activity') if len(elems) > 0 and elems[0].is_displayed(): elems[0].click() print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") else: print ("NO LINK FOUND") 

Incluso más simple que try / except es simplemente usar find_elements (). Si no está presente, devolverá la lista vacía. Si no está vacío, tintineo de primero encontrado: encontrado [0] .click ()