【问题标题】:How can I get the current contents of an element in webdriver如何在 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 将上一个命令塞入其中,并且在脚本运行时我可以在实际网页上看到它们。

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

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

【问题讨论】:

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

标签: python selenium webdriver


【解决方案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
      猜你喜欢
      • 2023-04-10
      • 2012-06-20
      • 2012-12-01
      • 2014-12-11
      • 2011-05-01
      • 2021-11-20
      • 1970-01-01
      • 2011-05-06
      • 2016-05-08
      相关资源
      最近更新 更多