遍历元素组提取子元素时仅获首个元素的问题求助
问题解决:遍历所有person元素获取数据
可能的原因
你的代码只获取到第一个person数据,大概率是元素未完全加载导致的——当你调用find_elements_by_class_name时,页面后面的person元素还没渲染完成,只能拿到已加载的第一个。另外,find_elements_by_class_name属于旧版API,已被Selenium弃用,也可能存在兼容性问题。
修正后的代码
首先导入Selenium等待模块,确保所有元素加载完成后再遍历:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By persons = [] # 等待最多10秒,直到所有person元素都加载完成 wait = WebDriverWait(driver, 10) person_elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'person'))) for person in person_elements: # 改用CSS选择器定位,更简洁且稳定 title = person.find_element(By.CSS_SELECTOR, '.title a').text company = person.find_element(By.CSS_SELECTOR, '.company a').text persons.append({'title': title, 'company': company}) # 输出期望格式的结果 for item in persons: print(f"{item['title']}, {item['company']}")
额外优化建议
- 如果你坚持使用XPath,确保相对路径正确且引号使用规范(避免转义错误),示例:
title = person.find_element(By.XPATH, './/div[@class="title"]/a').text - 如果页面是滚动加载更多person元素的动态页面,需要先滚动页面到底部,确保所有目标元素都被渲染出来。
内容的提问来源于stack exchange,提问作者Aslan
相关产品推荐
相关产品推荐

