2011-11-28 11 views
7

Sto cercando di ottenere il contenuto di uno textarea in un modulo HTML utilizzando webdriver in Python.Come posso ottenere il contenuto del testo di un'area di testo con webdriver?

Ricevo il testo, ma mancano le nuove righe. I numeri selenium docs sono praticamente inutili; dicono:

classe selenium.webdriver.remote.webelement.WebElement (genitore, ID_)

[...]

testo: Ottiene il testo dell'elemento.

Attualmente sto facendo il seguente:

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

Questo stampa la rappresentazione di una stringa Python unicode dei contenuti del textarea, tranne che tutti i ritorni a capo sono stati sostituiti da spazi. Doh!

Non sono sicuro se sono di fronte a un problema di codifica del testo, selenio/bug del webdriver (impossibile trovarlo nel tracker) o errore dell'utente.

C'è un altro modo per farlo?

EDIT: ho appena provato Chrome ... funziona bene. Ho segnalato uno bug al tracker dei problemi del selenio. La soluzione alternativa di Sam (la risposta accettata sotto) funziona in Firefox con un avvertimento: i simboli vengono convertiti in codici di entità HTML nella stringa restituita. Questo è no big deal.

risposta

4

Come soluzione alternativa, è possibile provare a utilizzare ExecuteScript per ottenere innerHtml. Io non sono un ragazzo di pitone, ma qui è in C#: valore di attributo

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

Grande suggerimento. Funziona quasi perfettamente. L'unico problema è che i simboli vengono tradotti nei loro codici di entità HTML nella stringa risultante. cioè '<' diventa '<', e così via. Ho lanciato alcuni incantesimi Python di basso livello e mitigato quel problema. –

+4

Per riferimento, il codice Python equivalente è 'text = my_web_driver.execute_script (" return argomenti [0] .innerHTML ", textarea_element)'. –

+1

In Python, 'xml.sax.saxutils.unescape (text)' cancella le entità '&', '<' and '>'. –

7

Sono appena di tag textarea. Di seguito è riportato un esempio di codice Java.

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

Sto usando il driver Chrome, e soprattutto il codice messo un testo (XML nel mio caso), con a capo nel registro. Ho avuto l'idea da http://www.w3schools.com/jsref/dom_obj_textarea.asp

gen

0

In Python ottenere il primo elemento, e dopo ottenere il valore di attributo, la funzione in python get_attribute ('valore').

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')) 
Problemi correlati