关于python中selenium模块中By.CLASS_NAME 的限制-该方法仅接受单个class名称
Posted on 2025-08-06 16:56 520_1351 阅读(11) 评论(0) 收藏 举报关于 元素的 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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!
浙公网安备 33010602011771号