Python 3.x Selenium获取指定类下所有可见元素的方法
解决Selenium仅获取可见元素的问题
嘿,我来帮你搞定这个只获取可见元素的需求!你之前用find_elements_by_class_name('getPhotos')会拿到所有匹配类名的元素(包括隐藏的),这很正常,因为这个方法不会区分元素是否可见。下面给你两种靠谱的解决方案:
方法一:获取所有元素后筛选可见项(最通用)
这是最稳妥的方式,不管页面有没有引入其他库都能用。核心思路是先拿到所有目标元素,再用is_displayed()方法过滤出可见的元素——这个方法会自动判断元素是否在页面上真正可见(比如排除display:none、visibility:hidden、尺寸为0的元素等)。
代码示例:
首先记得导入必要的模块:
from selenium import webdriver from selenium.webdriver.common.by import By # 可选:如果需要等待元素加载,导入等待相关模块 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
然后编写逻辑:
# 初始化浏览器(这里以Chrome为例) driver = webdriver.Chrome() driver.get("你的目标页面URL") # 等待元素加载完成(避免页面未加载完就获取元素) wait = WebDriverWait(driver, 10) all_get_photos = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'getPhotos'))) # 筛选出可见元素 visible_get_photos = [elem for elem in all_get_photos if elem.is_displayed()] # 遍历可见元素并打印迭代次数,还可以按需限制长度 for count, elem in enumerate(visible_get_photos[:你的限制长度], start=1): print(f"迭代次数: {count}") # 记得关闭浏览器 driver.quit()
方法二:用CSS选择器结合JavaScript(需页面引入jQuery)
如果你的目标页面已经引入了jQuery,可以直接用jQuery的:visible伪类来定位可见元素,这种方式会直接返回可见元素,不需要二次筛选:
代码示例:
# 获取可见元素(通过执行jQuery脚本) visible_get_photos = driver.execute_script("return $('.getPhotos:visible');") # 遍历打印迭代次数,按需限制长度 for count, elem in enumerate(visible_get_photos[:你的限制长度], start=1): print(f"迭代次数: {count}")
不过要注意:如果页面没有加载jQuery,这种方法会报错,所以更推荐方法一哦。
小提示
enumerate函数的start=1参数可以让迭代次数从1开始计数,更符合日常习惯;- 一定要等待元素加载完成后再获取,否则可能会拿到空列表或者不完整的元素集合;
- 如果你需要限制元素长度,直接对
visible_get_photos进行切片即可,比如visible_get_photos[:5]只取前5个可见元素。
内容的提问来源于stack exchange,提问作者Noran Magdi
相关产品推荐
相关产品推荐

