Selenium Python使用CSS_SELECTOR获取元素异常:仅返回3条而非50条
问题分析与解决方案
核心问题排查
- 动态加载等待不充分:
time.sleep(1)的硬等待时间不足以让页面加载完所有50个商品元素,导致仅捕获到已加载的3个。 - 冗余的子元素选择逻辑:循环中通过父元素再次查找
.elements-title-normal.one-line完全多余——父元素本身就是.elements-title-normal,子元素不会重复携带该类名,这会额外增加出错概率。 - 选择器匹配范围偏差:需确认
.elements-title-normal是否是所有商品标题的通用类,部分商品可能使用了变体类(比如.elements-title-normal.two-line),导致选择器漏选。
修正后的代码
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 用显式等待替代硬等待,确保所有目标元素加载完成 product_names = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".elements-title-normal")) ) list1 = [] for item in product_names: # 直接获取当前元素文本,无需嵌套查找 list1.append(item.text) # 可选:若有反爬限制,保留极短等待,优先用显式等待替代硬等待 # time.sleep(0.1) print(f"捕获到的元素数量:{len(list1)}") print(list1)
额外验证步骤
- 打开浏览器开发者工具(F12),在控制台执行
document.querySelectorAll(".elements-title-normal").length,确认返回值是否为50。若不是,说明选择器需调整,比如检查是否有父容器限制、类名拼写错误。 - 如果控制台返回50但代码仍拿不到,检查元素是否在iframe内,若存在需先切换到对应iframe再执行查找。
内容的提问来源于stack exchange,提问作者AlperTanrikulu
相关产品推荐
相关产品推荐

