我想使用Selenium从DOM中提取一些信息。我正在使用C#WebDriver。
查看IWebElement接口,您可以轻松提取给定的属性。但是,我想提取一个元素的所有属性而无需事先知道它们的名称。
必须有一些简单的方法来执行此操作,因为如果您知道属性名称,则可以使用一种方法来获取属性值。
一个例子:
<button id="myButton" ng-click="blabla()" ng-show="showMyButton" some-other-attribute="foo.bar" /> IWebElement element = driver.FindElement(By.Id("myButton")); Dictionary<string, string> attributes = new Dictionary<string, string>(); // ??????? // Profit.
希望我缺少明显的东西。
提前致谢!
.attributesJavaScript中的属性将返回给定元素具有的所有属性及其值的数组。
.attributes
因此,您需要做的是首先获得一个driver具有运行JavaScript功能的功能:
driver
IJavascriptExecutor javascriptDriver = (IJavaScriptExecutor)driver;
现在,通过以下方式执行它:
Dictionary<string, object> attributes = javascriptDriver.ExecuteScript("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) as Dictionary<string, object>;
JavaScript的思想是attributes在元素本身内使用JavaScript 属性,然后提取我们需要的信息- 属性的名称和值。attributes实际上,该属性可获取有关每个属性的大量信息,但我们只需要两个字段。因此,我们得到了这两个字段,将它们放入字典中,然后WebDriver会将其解析回给我们。(它可能会被清理一点)
attributes
现在是a Dictionary,因此您可以随意循环浏览。的key每对将是 名称 属性的,并且value每对将是 值 的属性。
Dictionary
key
value
仅使用在网络上点缀的一些元素(这里是Google和一些小的网页)进行了测试,它似乎运行良好。