使用 selenium python 使用复合类解析 HTML 内容

Posted

技术标签:

【中文标题】使用 selenium python 使用复合类解析 HTML 内容【英文标题】:Parsing the HTML content using compound class using selenium python 【发布时间】:2017-05-28 18:47:57 【问题描述】:

我的 GUI 中有一个显示按钮,用于显示连接状态(带有绿色复选标记的按钮表示连接已建立,带有红色叉号表示未连接) 我必须使用我的代码检查状态。 我正在解析该特定标题栏类名称(容器流体)的内容。 由此,我正在解析该显示按钮的显式内容。

elem = driver.find_element_by_class_name("container-fluid")
a= elem.get_attribute("outerhtml")
b= a.split("powerOn icon-ok-sign") 

在此之后,我解析该按钮的一些显式内容并确定是否存在连接。

但如果我使用 class="powerOn icon-ok-sign",我会收到错误:

不允许使用复合类名

<div class="powerOn icon-ok-sign" data-original-title="Connection" style=" font-size: 2em;" data-toggle="tooltip" title="" data-placement="bottom" ng-class=""powerOn icon-ok-sign": titleArea.systemStatus.connection.value, "powerOff icon-remove-sign" : !titleArea.systemStatus.connection.value"></div>

【问题讨论】:

【参考方案1】:

但如果我使用 class="powerOn icon-ok-sign",我会收到错误 Compound class names not allowed

其实selenium doesn't support to locate an element using Compound class名字。

您应该尝试使用 on of then 来代替:-

driver.find_element_by_class_name("powerOn")

或者

driver.find_element_by_class_name("icon-ok-sign")

或使用css_selector 使用多个类名来定位相同元素的最佳方法:-

driver.find_element_by_css_selector(".powerOn.icon-ok-sign")

参考链接:-

Compound class names are not supported error in WebDriver How to avoid Compound Class name error in Page Object?

【讨论】:

嗨@Saurabh Gaur,我对此还有一个疑问。当我的连接按钮显示交叉时,浏览器窗口不再活动。因此,当时当我使用 elem = driver.find_element_by_css_selector(".powerOn.icon-ok-sign") 时,我得到了这个异常 NoSuchElementException: Message: Unable to locate element: "method":"css selector","选择器":".powerOn.icon-ok-sign"。那么,检查这种情况的正确方法是什么,我的脚本继续没有任何异常错误 @KaranPatel 你应该使用然后driver.find_elements_by_css_selector(".powerOn.icon-ok-sign") 这将返回元素列表或空列表。如果元素不存在,它永远不会抛出异常。因此,您只需检查空列表即可确定您的状况。谢谢..:) 我使用了 try and except 条件,但这看起来也不错。谢谢:)【参考方案2】:

您可以改用CSS Selector 搜索:

driver.find_element_by_css_selector(".powerOn.icon-ok-sign")

或使用其中一个类名来选择您的元素:

driver.find_element_by_class_name("powerOn")

【讨论】:

嗨,Andersson,我对此还有一个疑问。当我的连接按钮显示交叉时,浏览器窗口不再活动。因此,当时当我使用 elem = driver.find_element_by_css_selector(".powerOn.icon-ok-sign") 时,我得到了这个异常 NoSuchElementException: Message: Unable to locate element: “方法”:“css 选择器”,“选择器”:“.powerOn.icon-ok-sign”。那么,检查这种情况的正确方法是什么,我的脚本会继续运行而不会出现任何异常错误。

以上是关于使用 selenium python 使用复合类解析 HTML 内容的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义可打包类解组 Android 应用程序中的错误

无效的选择器:不允许使用 Selenium 的复合类名称错误

PythonSelenium元素定位错误之解决办法

Selenium在定位的class含有空格的复合类的解决办法整理

Java Selenium - 元素定位

如何使用复合键进行数据流聚合和加入 python