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&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")