2012-04-20 15 views
43

? Debo estar pensando en esto mal.¿Cómo puedo obtener el contenido actual de un elemento en webdriver

Quiero obtener el contenido de un elemento, en este caso un formfield, en una página que accedo con WebDriver/Selenio 2

Aquí está mi código roto:

Element=driver.find_element_by_id(ElementID) 
print Element 
print Element.text 

aquí es el resultado:

<selenium.webdriver.remote.webelement.WebElement object at 0x9c2392c> 

(observe la línea en blanco) sé que elemento tiene contenido ya que acabo los metí allí con el comando anterior utilizando .sendkeys y puedo verlos en la página web real mientras se ejecuta el script.

pero necesito recuperar el contenido.

¿Qué puedo hacer para leer esto? Preferiblemente de forma genérica para que pueda extraer contenidos de diversos tipos de elementos.

+3

¿Qué tipo de elemento es? Si se trata de un elemento de entrada, necesita el atributo "valor" en lugar del texto – prestomanifesto

+0

Ah, el valor podría ser la solución. Lo intentaré. –

Respuesta

50

Creo que prestomanifesto estaba en el camino correcto. Depende del tipo de elemento que sea. Debería usar element.get_attribute('value') para elementos de entrada y element.text para devolver el nodo de texto de un elemento.

Puede consultar el objeto WebElement con element.tag_name para averiguar qué tipo de elemento es y devolver el valor apropiado.

Esto debería ayudar a determinar:

driver = webdriver.Firefox() 
driver.get('http://www.w3c.org') 
element = driver.find_element_by_name('q') 
element.send_keys('hi mom') 

element_text = element.text 
element_attribute_value = element.get_attribute('value') 

print element 
print 'element.text: {0}'.format(element_text) 
print 'element.get_attribute(\'value\'): {0}'.format(element_attribute_value) 
driver.quit() 
+0

Gracias .. He estado rastreando el sitio web para esta respuesta durante horas. –

+0

@KehlinSwain Feliz de ayudar :) – Isaac

+0

¿Funciona este mismo método si hay varias clases seguidas y desea obtener el texto de cada clase en esa fila? –

-5

En Java es Webelement.getText(). No estoy seguro acerca de Python.

+2

La etiqueta de pregunta implica que se trata de 'python' – Leva7

3
element.get_attribute('innerHTML') 
0

Mi respuesta se basa en esta respuesta: How can I get the current contents of an element in webdriver simplemente más como copiar y pegar.

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get('http://www.w3c.org') 
element = driver.find_element_by_name('q') 
element.send_keys('hi mom') 

element_text = element.text 
element_attribute_value = element.get_attribute('value') 

print (element) 
print ('element.text: {0}'.format(element_text)) 
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value)) 


element = driver.find_element_by_css_selector('.description.expand_description > p') 
element_text = element.text 
element_attribute_value = element.get_attribute('value') 

print (element) 
print ('element.text: {0}'.format(element_text)) 
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value)) 
driver.quit() 
Cuestiones relacionadas