es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Construir la expresión XPATH para obtener y hacer clic en un elemento de botón.

Estoy construyendo un scraper con Selenium, y lo tengo funcionando excepto por un campo de datos que me falta. Necesito primero hacer clic en un botón y luego obtener el valor. Pero no he podido presionar el botón porque no puedo construir la expresión XPath correcta para obtenerlo con Selenium.

La URL es esta: https://www.ikea.com/mx/es/p/kallax-estante-blanco-80275887/

Y necesito hacer clic en el botón “Medidas” (desplácese hasta la mitad de la página, justo entre “Detalles del producto” y “Productos similares”) para abrir un panel lateral y obtener la información que necesito. Pero hasta ahora, no he podido establecer la expresión XPath correcta para el botón.

Intenté con

driver.find_element_by_xpath(
"//button[@class='range-revamp-chunky-header']"
).click()

Pero de esta manera hizo clic en el primer botón (“Detalles del producto”).

También intenté algo como

driver.find_element_by_xpath(
"//button[@class='range-revamp-chunky-header' AND @text='Medidas']"
).click()

Pero no he podido hacer que funcione, solo obtuve este error:

Mensaje: no existe tal elemento: no se puede ubicar el elemento: {"método":"xpath","selector":"//button[@class='range-revamp-chunky-header' and @text='Medidas']"}

Por cierto, la lista de botones es dinámica… a veces puede haber 1, 2, 3 o 4 botones con la misma clase, la única diferencia que puedo ver es el texto del botón, por lo que obtener siempre el segundo botón con esa clase (como en la URL proporcionada) no siempre funcionará.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el botón “Medidas”, podemos intentar usar la siguiente expresión xpath:

    //button[contains(text(),'Medidas')]

    Esta expresión localizará cualquier botón en la página que contenga el texto “Medidas”. Dado que sabemos que el botón que queremos se encuentra entre las secciones “Detalles del producto” y “Productos similares”, podemos agregar otra condición para limitar la búsqueda:

    //div[contains(text(),'Detalles del producto')]/following-sibling::div//button[contains(text(),'Medidas')]

    Esta expresión busca un div que contenga el texto “Detalles del producto”, luego busca un div siguiente (es decir, un hermano) que contenga el botón “Medidas”. Tenga en cuenta que podemos encadenar múltiples condiciones utilizando los operadores “/” y “//”.

    Una vez que hayamos ubicado el botón, podemos hacer clic en él usando:

    driver.find_element_by_xpath("//div[contains(text(),'Detalles del producto')]/following-sibling::div//button[contains(text(),'Medidas')]").click()

Comments are closed.