Selenium WebDriver如何根据元素style的height值编写if判断逻辑?
问题描述
我想编写Selenium WebDriver脚本,当元素style属性的height值为0px时执行某操作,为其他值时执行另一操作。我已经能用element.value_of_css_property命令打印该值,但不知道如何将其用于if判断逻辑。以下是我处理的HTML代码片段和尝试后无效的代码:
目标HTML代码
<div id="computerfilter" class="gridView safari fixed" style="min-width: 110px; overflow: hidden; min-height: 89%;"> <ul style="position: relative; list-style: none; padding-inline-start: 0px; padding-left: 0px; margin-left: 0px; margin-right: 0px; height: 0px; width: 1000px;"><div style="position: relative; top: 0px;" class="viewport"><li class="lmigrid-row parent expanded" style="cursor: pointer;">
尝试的无效代码
if len(self.driver.find_elements(By.CSS_SELECTOR, "ul.computerfilter[style height:0px]"))
解决方案
方法一:获取CSS属性值做判断(推荐)
先精准定位目标ul元素,再获取其height属性值进行判断:
# 通过父元素id定位内部ul,避免页面其他ul干扰 target_ul = self.driver.find_element(By.CSS_SELECTOR, "#computerfilter ul") # 获取height的CSS属性值 current_height = target_ul.value_of_css_property("height") # 判断逻辑 if current_height == "0px": # 高度为0px时执行的操作 print("执行高度为0的操作") else: # 高度不为0时执行的操作 print("执行高度不为0的操作")
方法二:修正CSS选择器直接匹配
你之前的CSS选择器语法错误,正确匹配style中包含height: 0px的写法如下:
# 修正后的CSS选择器,用*=匹配属性包含指定文本 matching_elements = self.driver.find_elements(By.CSS_SELECTOR, "#computerfilter ul[style*='height: 0px']") if len(matching_elements) > 0: # 存在高度为0px的ul时执行操作 print("执行高度为0的操作") else: # 不存在时执行另一操作 print("执行高度不为0的操作")
注意点
- 定位元素时尽量精准,比如借助父元素的
id缩小范围,避免误匹配其他元素。 - style属性中的空格可能影响匹配,比如
height:0px和height: 0px,使用*=包含选择器可以兼容这种差异;如果用属性值严格匹配,要注意和实际返回的格式一致。
内容的提问来源于stack exchange,提问作者Jake Fink
相关产品推荐
相关产品推荐

