72

我一定是想错了。

我想在使用 Webdriver/Selenium 2 访问的页面上获取元素的内容,在本例中为表单域

这是我损坏的代码:

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

结果如下:

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

(注意空白行)我知道元素有内容,因为我只是使用 .sendkeys 使用上一个命令将它们填充在那里,并且在脚本运行时我可以在实际网页上看到它们。

但我需要将内容恢复为数据。

我能做些什么来阅读这个?最好以通用方式,以便我可以从各种类型的元素中提取内容。

4

5 回答 5

87

我相信 prestomanifesto 是在正确的轨道上。这取决于它是什么类型的元素。您需要使用element.get_attribute('value')输入元素并element.text返回元素的文本节点。

您可以检查 WebElement 对象element.tag_name以找出它是什么类型的元素并返回适当的值。

这应该可以帮助您弄清楚:

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()
于 2012-04-21T14:12:33.963 回答
53
element.get_attribute('innerHTML')
于 2017-03-27T13:31:39.953 回答
3

我知道当你说“内容”时你不是这个意思,但是如果你想找到一个 webelement 的所有属性的所有值,这是在 python 中使用 javascript 的一种非常好的方法:

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)

您还可以使用element.__dict__.

我认为这是关于您想从网络元素中获取的所有数据。

于 2018-09-14T18:23:13.330 回答
1

我的答案是基于这个答案:如何在 webdriver 中获取元素的当前内容, 就像复制粘贴一样。

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()
于 2017-09-20T09:41:19.303 回答
-11

在 Java 中它的Webelement.getText()。不确定python。

于 2012-04-21T00:31:01.247 回答