博客园  :: 首页  :: 管理

关于 元素的 class 属性值 的简单应用:

<!-- 示例元素 - Auther QQ:5201351 -->  
<button class="submit-btn">Click</button>  

元素的定位,可以使用 By.CLASS_NAME

button = driver.find_element(By.CLASS_NAME, "submit-btn")  

这里同样有另外一段 html 代码:

<cdk-virtual-scroll-viewport adapttablestickyheader="" class="cdk-virtual-scroll-viewport cdk-virtual-scrollable ui-table-virtual-scrollable-body cdk-virtual-scroll-orientation-vertical ng-star-inserted" style="width: auto;">*********</cdk-virtual-scroll-viewport>

我们可以使用如下两种方式进行定位:

# 可以分别指定单一的class的名称
scroll_container = driver.find_element(By.CLASS_NAME, "cdk-virtual-scroll-viewport")
scroll_container = driver.find_element(By.CLASS_NAME, "cdk-virtual-scrollable")

#  但不能按如下的方式定位 ,同时指定多个 CLASS_NAME
scroll_container = driver.find_element(By.CLASS_NAME, "cdk-virtual-scroll-viewport cdk-virtual-scrollable")

By.CLASS_NAME 的限制:该方法仅接受单个 class 名称(即 class 属性中的某一个值),若传入含空格的字符串(如 "a b"),会被视为无效选择器

 

解决方案 >>>>>>:          

1、 改用 By.CSS_SELECTOR, 通过 CSS 选择器组合多个 class(使用 . 连接):

# 匹配同时包含两个 class 的元素
scroll_container=driver.find_element(By.CSS_SELECTOR, ".cdk-virtual-scroll-viewport.cdk-virtual-scrollable")

注意:使用.链接,多个class直接连接就行,不能有任何空格!

优势:精准定位,避免因部分 class 重复导致误匹配

 

2、改用 By.XPATH, 通过 XPath 的 contains 函数匹配多个 class

scroll_container = driver.find_element(By.XPATH,"//*[contains(@class, 'cdk-virtual-scroll-viewport') and contains(@class, 'cdk-virtual-scrollable')]")

适用场景‌:需动态匹配部分 class 名称时

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/19025419