Selenium4按类名查找元素未正常工作的解决方法
问题说明
driver.find_elements(By.CLASS_NAME, 'mt-CardBasic-titleLink') 返回WebElement实例列表是Selenium的正常设计逻辑,Selenium全版本的元素查找方法返回值都是WebElement对象/对象列表,从来不会直接返回HTML源码,不存在代码疏漏,是对返回值的认知偏差导致无法提取属性。
正确提取href属性的实现
你写的元素定位逻辑本身没有问题,只需要在拿到WebElement列表后,遍历每个元素实例调用内置方法提取需要的内容即可,参考代码如下:
from selenium.webdriver.common.by import By # 原有定位逻辑保持不变 card_link_elements = driver.find_elements(By.CLASS_NAME, 'mt-CardBasic-titleLink') href_result = [] for element in card_link_elements: # 提取href属性值 link_href = element.get_attribute('href') href_result.append(link_href) # 如果需要获取元素对应的完整HTML源码,调用以下方法即可 # element_html = element.get_attribute('outerHTML') # 如果需要获取a标签的文本内容,直接取element.text即可 print(href_result)
注意事项
- 直接打印WebElement列表只会输出对象的内存标识,不会展示元素的属性、HTML结构等实际内容,必须针对单个元素调用对应方法取值
- 如果提取href时返回None,先校验定位到的元素标签类型:执行
print(element.tag_name)确认当前元素是<a>标签,类名匹配的非a标签元素不存在href属性 - 如果页面存在动态加载逻辑,建议搭配显式等待等元素完全渲染后再执行查找,避免拿到未加载完成的无效元素
内容的提问来源于stack exchange,提问作者Jugert Mucoimaj
相关产品推荐
相关产品推荐

