如何使用Python的Selenium WebDriver通过CSS选择器配对元素子节点?
用CSS选择器在Selenium中选择多个子元素的方案
当然可以用CSS选择器一次性选中多个子元素!结合你给出的HTML结构,我给你几个实用的方案:
1. 选中同类型的所有子元素
如果你想批量获取所有学校名称(.school元素),可以直接用层级选择器定位:
#education .degree .school
对应的Selenium代码:
from selenium.webdriver.common.by import By schools = driver.find_elements(By.CSS_SELECTOR, "#education .degree .school") for school in schools: print(school.text) # 会输出 "School1" 和 "School2"
同理,要获取所有毕业年份(.year元素),用这个选择器:
#education .degree .year
因为第二个.degree块里没有年份,这个选择器只会返回第一个块里的<p class="year">元素。
2. 同时选中不同类型的子元素
如果想一次性获取所有.school和.year元素,可以用逗号分隔多个选择器,表示“或”的逻辑:
#education .degree .school, #education .degree .year
对应的Selenium代码会返回所有匹配的元素(2个.school + 1个.year,共3个元素),你可以遍历它们处理文本或属性。
3. 按块遍历更精准(推荐)
考虑到有的.degree块可能缺少年份字段,更稳妥的方式是先获取每个学位块,再在块内单独提取子元素,避免空指针错误:
degrees = driver.find_elements(By.CSS_SELECTOR, "#education .degree") for degree in degrees: # 获取学校名称(每个块都有,直接用find_element) school_name = degree.find_element(By.CSS_SELECTOR, ".school").text # 获取年份(可能不存在,用find_elements判断) year_elements = degree.find_elements(By.CSS_SELECTOR, ".year") graduation_year = year_elements[0].text if year_elements else "无记录" print(f"学校:{school_name},就读年份:{graduation_year}")
这样处理的话,输出会是:
学校:School1,就读年份:2002-2008 学校:School2,就读年份:无记录
内容的提问来源于stack exchange,提问作者user18243nanana
相关产品推荐
相关产品推荐

