如何在 webdriver 中获取元素的当前内容

Posted

技术标签:

【中文标题】如何在 webdriver 中获取元素的当前内容【英文标题】:How can I get the current contents of an element in webdriver 【发布时间】:2012-05-02 08:26:25 【问题描述】:

我一定是想错了。

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

这是我损坏的代码:

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

结果如下:

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

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

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

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

【问题讨论】:

它是什么元素?如果它是输入元素,则需要属性“值”而不是文本 啊,价值可能是解决方案。会努力的。 【参考方案1】:

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

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

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

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

【讨论】:

如果一行中有多个类,并且您想获取该行中每个类的文本,这种方法是否有效?【参考方案2】:
element.get_attribute('innerhtml')

【讨论】:

非常有用的命令,用于获取页面上实际上没有出现的属性,例如hrefs等加1 获取元素:element.get_attribute('outerHTML')【参考方案3】:

我知道当你说“内容”时你不是这个意思,但是如果你想找到一个 web 元素的所有属性的所有值,这是在 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__ 获得一些额外的数据。

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

【讨论】:

【参考方案4】:

我的答案是基于这个答案:How can I get the current contents of an element in 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()

【讨论】:

【参考方案5】:

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

【讨论】:

问题标签暗示它是关于python

以上是关于如何在 webdriver 中获取元素的当前内容的主要内容,如果未能解决你的问题,请参考以下文章

python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码

如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?

Selenium webdriver在页面更改后获取元素

如何强制Selenium WebDriver点击当前不可见的元素?

如何在 Selenium WebDriver 中获取元素的文本,而不包括子元素文本?

vue获取页面内元素