it-swarm.com.de

Wie erhalte ich den aktuellen Inhalt eines Elements im Web-Treiber?

Ich muss falsch darüber nachdenken. 

Ich möchte den Inhalt eines Elements, in diesem Fall eines Formularfelds, auf einer Seite abrufen, auf die ich mit Webdriver/Selenium 2 zugreife

Hier ist mein fehlerhafter Code:

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

hier ist das Ergebnis:

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

(Beachten Sie die Leerzeile) Ich weiß, dass das Element Inhalte enthält, da ich sie mit .sendkeys mit dem vorherigen Befehl gerade dort hineingestopft habe und ich sie auf der tatsächlichen Webseite sehen kann, während das Skript ausgeführt wird. 

aber ich muss den Inhalt wieder in die Daten bringen.

Was kann ich tun, um das zu lesen? Vorzugsweise generisch, so dass ich Inhalte aus verschiedenen Elementtypen ziehen kann.

50
Skip Huffman

Ich glaube, das Prestomanifest war auf dem richtigen Weg. Es hängt davon ab, um welches Element es sich handelt. Sie müssten element.get_attribute('value') für Eingabeelemente und element.text verwenden, um den Textknoten eines Elements zurückzugeben.

Sie können das WebElement-Objekt mit element.tag_name überprüfen, um herauszufinden, um welche Art von Element es sich handelt, und den entsprechenden Wert zurückgeben.

Dies sollte Ihnen helfen herauszufinden: 

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

Ich weiß, als Sie "Inhalt" sagten, haben Sie das nicht gemeint, aber wenn Sie alle Werte aller Attribute eines Webelements finden möchten, ist dies eine sehr einfache Möglichkeit, dies mit Javascript in Python zu tun:

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)

sie können mit element.__dict__ auch einige zusätzliche Daten erhalten.

Ich denke, hier geht es um alle Daten, die Sie jemals von einem Webelement erhalten möchten.

0
Roskoe

Meine Antwort basiert auf dieser Antwort: Wie kann ich den aktuellen Inhalt eines Elements in webdriver erhalten

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.