¿Cómo hacer clic en una imagen con Selenium en Python?

CorePress2024-01-24  13

Estoy intentando hacer clic en este botón, pero el botón es en realidad una imagen que no tiene una identificación. Intenté usar XPath haciendo

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "/html/body/table/tbody/tr[1]/td/a"))
).click()

pero no se pudo encontrar el elemento. ¡Cualquier ayuda sería genial! Aquí está el HTML relevante

<a class="navcontent" href=f5-h-$$/MSL/jsp/openGimPage.jsp?gimEnv=GIM&amp;ep=GIMV" target="blank>
<img onclick="F5_r2u();F5_Event_common(event);try{return(eval(F5_Invoke_eval_event(null,F5_jsBody(function(){parent.trackUserActivity(this,'o','Portlet : Incident Management '+(this.src).split('/images/')[1].split('.')[0]);
<p id="text" style="top: 7px">View</p></a>

Editar: aquí está el resto del HTML Resto de HTML

No creo que puedas hacer clic en <a> etiquetas. Deberías intentar hacer clic en el div o en cualquier otra cosa que contenga <a>

- Misericordioso

26/03/2021 a las 18:45

Edité para agregar el resto del HTML

- Tyler

26/03/2021 a las 18:56

Tal vez puedas extraer el atributo href de una etiqueta y luego navegar hasta esa URL.

- George Imerlishvili

26/03/2021 a las 19:13



------------------------------------

Encontradola respuesta. Como señaló KunduK, estaba dentro de un iFrame. Tuve que usar lo siguiente para seleccionar el iFrame y luego hacer clic en el botón que se encuentra dentro.

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.find_element_by_css_selector("body > table > tbody > tr:nth-child(1) > td > a")



------------------------------------

Intenta seguir xpath para identificar el elemento. Utilice element_to_be_clickable() en lugar de presencia_of_element_located()

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[./p[text()='View']]"))).click()

4

Archivo "C:\Users\tmartin\AppData\Local\Temp\ATMStatusScript.py1\main.py", línea 22, en <módulo> WebDriverWait(driver, 10).until( Archivo "C:\Users\tmartin\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\support\wait.py", línea 80, en hasta que genere TimeoutException (mensaje, pantalla, seguimiento de pila) selenium.common.exceptions.TimeoutException: Mensaje:

- Tyler

29/03/2021 a las 11:50

¿El elemento debe estar dentro del iframe? ¿Puedes comprobar a Dom? Si está ahí, ¿necesitas cambiarlo?

- KunduK

29/03/2021 a las 11:55

Lo siento, pero ¿cómo puedo comprobar el Dom para saber si está en un iframe?

- Tyler

29/03/2021 a las 17:52

En realidad lo encontré. ¿Sabes cómo referenciarlo? <iframe src="https://stackoverflow.com/questions/66822694/incluye/página de inicio/incidentMgmt.jsp" ancho = "324" altura="265"></iframe>

- Tyler

29/03/2021 a las 18:06



------------------------------------

Gracias por tu sugerencia. También tenía esta pregunta y la resolví a la manera de Tyler. Pero utilicé el código siguiente para resolver el problema.

driver.switch_to.frame(browser.find_element_by_tag_name("iframe"))    
driver.find_element(by=By.XPATH, value="XPATH")    

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare