You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:11:04