El tutorial o código que hallarás en este artículo es la resolución más sencilla y válida que hallamos a tus dudas o dilema.
Solución:
Aquí hay una solución general:
def get_text_excluding_children(driver, element):
return driver.execute_script("""
return jQuery(arguments[0]).contents().filter(function()
return this.nodeType == Node.TEXT_NODE;
).text();
""", element)
El elemento pasado a la función puede ser algo obtenido de la find_element...()
métodos (es decir, puede ser un WebElement
objeto).
O si no tiene jQuery o no quiere usarlo, puede reemplazar el cuerpo de la función anterior con esto:
return self.driver.execute_script("""
var parent = arguments[0];
var child = parent.firstChild;
var ret = "";
while(child)
if (child.nodeType === Node.TEXT_NODE)
ret += child.textContent;
child = child.nextSibling;
return ret;
""", element)
De hecho, estoy usando este código en un conjunto de pruebas.
En el HTML que has compartido:
This is some
text
El texto This is some
está dentro de un nodo de texto. Para representar el nodo de texto de forma estructurada:
This is some
text
Este caso de uso
Para extraer e imprimir el texto This is some
desde el nodo de texto usando el cliente python de Selenium, tiene 2 formas de la siguiente manera:
-
Usando
splitlines()
: Puede identificar el elemento principal, es decirextrae elinnerHTML
y luego usarsplitlines()
como sigue:-
usando xpath:
print(driver.find_element_by_xpath("//div[@id='a']").get_attribute("innerHTML").splitlines()[0])
-
usando xpath:
print(driver.find_element_by_css_selector("div#a").get_attribute("innerHTML").splitlines()[0])
Usando
execute_script()
: También puede utilizar elexecute_script()
método que puede ejecutar JavaScript sincrónicamente en la ventana/marco actual de la siguiente manera:-
usando xpath y primer hijo:
parent_element = driver.find_element_by_xpath("//div[@id='a']") print(driver.execute_script('return arguments[0].firstChild.textContent;', parent_element).strip())
-
usando xpath y childNodes[n]:
parent_element = driver.find_element_by_xpath("//div[@id='a']") print(driver.execute_script('return arguments[0].childNodes[1].textContent;', parent_element).strip())
def get_true_text(tag): children = tag.find_elements_by_xpath('*') original_text = tag.text for child in children: original_text = original_text.replace(child.text, '', 1) return original_text
Comentarios y calificaciones del post
Puedes sostener nuestra misión dejando un comentario o puntuándolo te damos la bienvenida.
¡Haz clic para puntuar esta entrada!(Votos: 0 Promedio: 0)Utiliza Nuestro Buscador
-