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.

XPath: Encuentra el elemento que contiene el texto exacto mientras traduces y aplicas normalize-space.

No estoy seguro de la sintaxis correcta de XPath para lograr estos objetivos:

  • El contenido de texto del elemento en la página web debería ser exactamente "ABC", excepto:
  • Quiero usar translate para poder buscar con "abc" y encontrar "ABC"
  • Quiero hacer normalize-space

Conozco la sintaxis para translate y normalize-text cuando se utiliza contains, es decir:

"//*[contains(translate(normalize-space(.), '%s), '%s')]" % ("ABC', 'abc'", "abc")
 #                                                           ↑ Traducción   ↑ Objetivo

Esto encontrará un elemento que contiene "ABC" como "ABCD" cuando se busca con "abc".

Sin embargo, estoy teniendo dificultades con la sintaxis correcta cuando no se utiliza contains, es decir, que el contenido de texto debe ser exactamente "ABC" y no "ABCD" y ser encontrado con "abc" – al mismo tiempo que se realiza normalize-space.

Sé que se puede encontrar un texto exacto, por ejemplo, usando:

//*[normalize-space(text()) = "ABC"]

¿Cómo combino estas partes?


NB: Estoy usando Firefox para Selenium para encontrar elementos mediante driver.find_element_by_xpath. Según tengo entendido, Firefox utiliza XPath 1 y no versiones más recientes como XPath 2.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el objetivo de encontrar un elemento en una página web con un contenido de texto exacto de "ABC" y utilizar translate para buscar "abc" y realizar normalize-space, se puede utilizar la siguiente sintaxis de XPath:

    //*[translate(normalize-space(text()), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'abc']
    

    Esta expresión XPath utiliza la función translate para convertir el contenido de texto a minúsculas y la función normalize-space para eliminar espacios en blanco al principio y al final, y colapsar cualquier secuencia de espacios internos en un solo espacio. Luego compara el contenido de texto resultante con 'abc' para encontrar el elemento con el contenido de texto exacto de "ABC" sin importar las mayúsculas.

    Tenga en cuenta que, dado que Firefox utiliza XPath 1, la función translate está limitada a reemplazar caracter por caracter, por lo que se requiere un reemplazo por separado para cada letra mayúscula.

Comments are closed.