如何在 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点击当前不可见的元素?