Selenium使用CSS选择器定位特定类名元素报错问题咨询
问题背景
使用CSS选择器按类名查找页面元素时,出现两段逻辑相似的代码一段正常运行、一段运行失败的异常情况,具体场景如下:
可正常运行场景
- 对应页面HTML结构截图:

- 可正常执行的代码片段:
driver.get(url) print('a') # 标记代码执行位置 disabled_next = driver.find_elements(By.CSS_SELECTOR, '.page-link.next.disabled') print(disabled_next)
运行失败场景
- 对应页面HTML结构截图:

- 运行失败的代码片段:
driver.get(url) print('a') enabled_next = driver.find_elements(By.CSS_SELECTOR, '.page-link.next') print(enabled_next)
- 异常表现:第二段代码执行时,紧跟在
driver.get(url)后的print('a')语句完全没有触发,直接抛出如下报错:
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot determine loading status from unknown error: unexpected command response (Session info: chrome=103.0.5060.66)
- 当前运行环境:Chrome 103版本 + 同版本号ChromeDriver 103,已知该版本存在部分已知兼容问题。
待咨询问题
- 上述报错是版本兼容问题导致,还是
.page-link.next的CSS选择器写法存在错误? - 如何提取
<a>标签的class属性值,例如获取示例中"page-link next disabled"、"page-link next"这类属性内容?
解答
问题1:报错原因判定
.page-link.next的CSS选择器写法完全正确:匹配同时包含多个类名的元素时,将多个类选择器连续书写、中间不加空格是标准CSS语法,用来命中同时带有所有指定类名的元素,写法本身没有任何问题。- 该报错是Chrome 103与对应版本ChromeDriver的已知兼容bug,和选择器写法、后续元素查找逻辑没有任何关系。这个bug的典型表现就是
driver.get()加载页面时偶发加载状态判定失败,直接抛出异常中断执行流程——这也是为什么print('a')没有运行,代码在driver.get()调用阶段就已经崩溃,根本没有走到后续逻辑。 - 修复方案:将Chrome和ChromeDriver同步升级到104及以上版本即可,该bug在104版本已被官方修复。如果暂时无法升级版本,可以给
driver.get()添加异常捕获重试逻辑,或者将页面加载策略调整为非阻塞模式,绕过这个偶发问题。
问题2:提取a标签class属性值的方法
定位到目标元素对象后,直接调用Selenium内置的get_attribute方法即可获取class属性的完整字符串值,示例代码如下:
# 定位到目标a标签元素 next_btn = driver.find_element(By.CSS_SELECTOR, '.page-link.next') # 获取class属性的完整内容 class_content = next_btn.get_attribute('class') # 此时class_content就是"page-link next disabled"或"page-link next"格式的字符串 print(class_content) # 如果需要拆分为独立的类名列表,直接按空格分割即可 class_list = class_content.split()
如果需要判断下一页按钮是否为禁用状态,既可以检查'disabled' in class_list,也可以直接用.page-link.next.disabled选择器查找元素,根据返回的元素列表是否为空判断状态,两种方式都能实现需求。
内容的提问来源于stack exchange,提问作者jqlifer1
相关产品推荐
相关产品推荐

