使用Selenium时find_element可用,find_elements返回空列表求助
问题解决思路
首先明确核心问题:By.CLASS_NAME不支持多类名组合查询,你传入的"rg_i.Q4LuWd"会被Selenium识别为单个带点的类名,而非同时匹配rg_i和Q4LuWd两个类。这就解释了为什么find_element能找到一个匹配元素(页面中恰好存在一个类名为rg_i.Q4LuWd的元素),但find_elements返回空(没有更多相同类名的元素)。
而你实际要获取的是同时拥有rg_i和Q4LuWd两个类的元素,以下是正确的实现方式:
方法1:使用CSS_SELECTOR(推荐)
CSS_SELECTOR支持多类名组合,用.连接多个类即可匹配同时拥有这些类的元素:
elements = driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd")
方法2:使用XPATH
通过XPATH的条件判断,匹配class属性中同时包含两个类名的元素:
elements = driver.find_elements(By.XPATH, "//*[contains(@class, 'rg_i') and contains(@class, 'Q4LuWd')]")
额外处理:动态加载元素
如果目标元素是通过滚动页面、AJAX请求动态生成的,直接调用find_elements可能因元素未加载完成返回空列表。此时需要添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待最多10秒,直到所有目标元素出现在DOM中 wait = WebDriverWait(driver, 10) elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".rg_i.Q4LuWd")))
内容的提问来源于stack exchange,提问作者dohyunii
相关产品推荐
相关产品推荐

