当前位置: 首页 > 面试题库 >

Selenium Webdriver:如何找到元素的所有属性?

双恩
2023-03-14
问题内容

在Python Selenium模块中,一旦有了WebElement对象,我可以使用以下命令获取其任何属性的值get_attribute()

foo = elem.get_attribute('href')

如果命名的属性'href'不存在,None则返回。

我的问题是,如何获取元素具有的所有属性的列表?似乎没有get_attributes()get_attribute_names()方法。

我正在为Python使用Selenium模块的2.44.0版本。


问题答案:

这是 不可能的 使用硒webdriver的API,但你可以_执行JavaScript代码_来获取所有属性:

driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element)

演示:

>>> from selenium import webdriver
>>> from pprint import pprint
>>> driver = webdriver.Firefox()
>>> driver.get('https://stackoverflow.com')
>>> 
>>> element = driver.find_element_by_xpath('//div[@class="network-items"]/a')
>>> attrs = driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element)
>>> pprint(attrs)
{u'class': u'topbar-icon icon-site-switcher yes-hover js-site-switcher-button js-gps-track',
 u'data-gps-track': u'site_switcher.show',
 u'href': u'//stackexchange.com',
 u'title': u'A list of all 132 Stack Exchange sites'}

为了完整起见,一种替代解决方案是获取标记outerHTML并使用HTML解析器解析属性。示例(使用BeautifulSoup):

>>> from bs4 import BeautifulSoup
>>> html = element.get_attribute('outerHTML')
>>> attrs = BeautifulSoup(html, 'html.parser').a.attrs
>>> pprint(attrs)
{u'class': [u'topbar-icon',
            u'icon-site-switcher',
            u'yes-hover',
            u'js-site-switcher-button',
            u'js-gps-track'],
 u'data-gps-track': u'site_switcher.show',
 u'href': u'//stackexchange.com',
 u'title': u'A list of all 132 Stack Exchange sites'}


 类似资料:
  • 在试图找出如何定位一组特定的Web元素时,我遇到了这个问题,我想知道我是否可以做同样的操作,只是它只给我包含特定属性的后代元素。 为了澄清,我知道我可能能够过滤它,但我正在寻找一种不过滤的方法。 此外,我使用的是java,作为web驱动程序,我使用的是chrome驱动程序(我使用Selenium来实现这一点,我不知道这是否明显,因为这是我迄今为止学习的唯一web控制工具……) 感谢前面的回答!

  • 问题内容: 我需要JavaScript代码来遍历HTML元素中的填充属性。 这个ref表示我可以通过索引访问它,但是没有指定它是否受良好支持并且可以使用(跨浏览器)。 还是其他方式?(不使用任何框架,例如jQuery / Prototype) 问题答案: 这将在IE,Firefox和Chrome中运行(有人可以测试其他人吗?—谢谢@Bryan): 编辑:IE迭代有问题的DOM对象支持的 所有 属性

  • 问题内容: 我的网站上有一个选择控件。我正在使用页面对象与页面进行交互。如果我这样做(在我的课程下的前两行和我的方法中) 它以空指针失败。我也尝试了没有。 现在,如果我在我的方法中执行此操作,则一切正常,然后选择正确的项目 这是该控件的实际网页摘要(已编辑以保护无辜者) 让我说我可以解决我的问题, 但是 我不明白为什么“ 正常 ”路径无法正常工作。 问题答案: 那是因为该类具有以下构造函数: 见J

  • 问题内容: 我知道我可以使用以下方法: 但是我想做的就是简单地获取页面中存在的所有元素ID的列表,也许还有它们出现的标记类型。 我该怎么做? 问题答案: 以前不必这样做,但是可以从逻辑上考虑一下,您可以使用XPath来做到这一点(也许是其他方式,XPath是出现在我脑海中的第一件事)。 使用XPath (具有某种ID的 任何 元素)使用。 然后,您可以遍历集合,并使用每个元素的属性来找出元素的 种

  • 问题内容: 我试图在JavaScript数组中找到元素的所有实例的索引,例如“ Nano”。 我尝试了jQuery.inArray或类似的.indexOf(),但是它只给出了元素的最后一个实例的索引,在这种情况下为5。 如何获得所有实例的信息? 问题答案: 该方法有一个可选的第二个参数,用于指定从其开始搜索的索引,因此您可以在循环中调用它以查找特定值的所有实例: 您并没有真正弄清楚如何使用索引,因

  • 我有4个HTML元素,我需要知道它的属性(HTML5):a-download、href、hreflang、media、rel、target、键入img-alt、crossorigin、height、ismap、longdesc、size、src、srcset、usemap、width ol-reversed、start、键入td-headers、colspan、rowspan 还有吗?