web-dev-qa-db-fra.com

Comment puis-je obtenir le contenu actuel d'un élément dans webdriver

Je dois penser à ce qui ne va pas. 

Je souhaite obtenir le contenu d'un élément, dans ce cas un formulaire, sur une page à laquelle j'accède avec Webdriver/Selenium 2

Voici mon code cassé:

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

voici le résultat:

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

(Remarquez la ligne vide) Je sais que cet élément a un contenu puisque je viens de les insérer ici avec la commande précédente utilisant .sendkeys et que je peux les voir sur la page Web réelle pendant l'exécution du script. 

mais je dois récupérer le contenu dans les données.

Que puis-je faire pour lire ceci? De préférence, de manière générique, afin de pouvoir extraire le contenu de divers types d’éléments.

50
Skip Huffman

Je crois que le prestomanifesto était sur la bonne voie. Cela dépend de quel type d'élément il s'agit. Vous devez utiliser element.get_attribute('value') pour les éléments en entrée et element.text pour renvoyer le nœud de texte d'un élément.

Vous pouvez vérifier l'objet WebElement avec element.tag_name pour savoir de quel type d'élément il s'agit et renvoyer la valeur appropriée.

Cela devrait vous aider à comprendre: 

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()
63
Isaac
element.get_attribute('innerHTML')
13
xingpei Pang

Je sais que lorsque vous avez dit «contenu», vous ne vouliez pas dire cela, mais si vous voulez trouver toutes les valeurs de tous les attributs d'un élément Web, c'est un moyen très astucieux de le faire avec JavaScript en python:

everything = b.execute_script(
    'var element = arguments[0];'
    'var attributes = {};'
    'for (index = 0; index < element.attributes.length; ++index) {'
    '    attributes[element.attributes[index].name] = element.attributes[index].value };'
    'var properties = [];'
    'properties[0] = attributes;'
    'var element_text = element.textContent;'
    'properties[1] = element_text;'
    'var styles = getComputedStyle(element);'
    'var computed_styles = {};'
    'for (index = 0; index < styles.length; ++index) {'
    '    var value_ = styles.getPropertyValue(styles[index]);'
    '    computed_styles[styles[index]] = value_ };'
    'properties[2] = computed_styles;'
    'return properties;', element)

vous pouvez également obtenir des données supplémentaires avec element.__dict__.

Je pense que cela concerne toutes les données que vous souhaiteriez obtenir d'un élément Web.

0
Roskoe

Ma réponse est basée sur cette réponse: Comment puis-je obtenir le contenu actuel d'un élément dans webdriver Juste plus comme un copier-coller.

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()
0
Alex F.