2011-11-28 25 views
7

Estoy tratando de obtener el contenido de un textarea en un formulario HTML usando webdriver in Python.¿Cómo obtengo los contenidos de texto de un área de texto con webdriver?

Recibo el mensaje de texto, pero faltan nuevas líneas. El selenium docs son bastante inútiles; dicen:

selenium.webdriver.remote.webelement.WebElement clase (padre, ID_) texto

[...]

: Obtiene el texto del elemento.

actualmente estoy haciendo lo siguiente:

from selenium import webdriver 

# open the browser and web site 
b = webdriver.Firefox() 
b.get('http://www.example.com') 

# get the textarea element 
textbox = b.find_element_by_name('textbox') 

# print the contents of the textarea 
print(repr(textbox.text)) 

Esto imprime la representación de una cadena Unicode de Python de los contenidos del área de texto, con excepción de todas las nuevas líneas han sido reemplazados por espacios. Doh!

No estoy seguro de si estoy frente a un problema de codificación de texto, error de selenium/webdriver (no pude encontrarlo en el rastreador) o error del usuario.

¿Hay alguna otra manera de hacerlo?

EDIT: Acabo de probar Chrome ... funciona bien. Informé un bug al rastreador de problemas del selenio. La solución de Sam (la respuesta aceptada a continuación) funciona en Firefox con una advertencia: los símbolos se convierten en códigos de entidad HTML en la cadena devuelta. Esto es no big deal.

Respuesta

4

Como solución alternativa puede intentar usar ExecuteScript para obtener innerHtml. No soy un tipo pitón, pero aquí está en C#: valor del atributo

IWebElement element = ... 
String returnText = ((IJavaScriptExecutor)webDriver).ExecuteScript("return arguments[0].innerHTML", element).ToString(); 
+0

Gran sugerencia. Esto funciona casi a la perfección. El único problema es que los símbolos se traducen a sus códigos de entidad HTML en la cadena resultante. es decir '' 'se convierte en' < ', y así sucesivamente. Lancé algunos hechizos de Python de bajo nivel y mitigé ese problema. –

+4

Como referencia, el código de Python equivalente es 'text = my_web_driver.execute_script (" return arguments [0] .innerHTML ", textarea_element)'. –

+1

En Python, 'xml.sax.saxutils.unescape (text)' un-escapes de las entidades '&', '<' and '>'. –

7

yo sólo tengo área de texto de la etiqueta. A continuación se muestra un ejemplo de código de Java.

WebElement textarea = driver.findElement(By.id("xf-1242"));   
String text = textarea.getAttribute("value"); 
log.debut(text); 

estoy usando Chrome conductor, y por encima de código de poner un texto (XML en mi caso) con saltos de línea en el registro. me ocurrió la idea de http://www.w3schools.com/jsref/dom_obj_textarea.asp

Ene

0

En Python obtener el primer elemento, y después de obtener el valor de atributo, en función de get_attribute pitón ('valor').

from selenium import webdriver 

driver = webdriver.Firefox() 
URL = "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea" 
driver.get(URL) 
driver.switch_to.frame("iframeResult") 
# get the textarea element by tag name 
textarea = driver.find_element_by_tag_name('textarea') 

# print the attribute of the textarea 
print(textarea.get_attribute('value')) 
print(textarea.get_attribute('rows')) 
print(textarea.get_attribute('cols')) 
Cuestiones relacionadas