如何使用Python中的Selenium WebDriver通过CSS选择器对元素的子项进行配对?

时间:2018-04-05 19:00:51

标签: python selenium css-selectors

我正在使用Selenium WebDriver从许多网页中抓取信息。我想知道是否可以通过CSS选择器选择多个子元素。 HTML结构如下所示:

<section id="education">
  <div class="degree">
    <h3 class="school"> School1 </h3>
    <p class="year"> 2002-2008 </p>
  </div>
  <div class="degree">
    <h3 class="school"> School2 </h3>
  </div>
</section>

在这种情况下,我想选择具有相应年份范围的学校名称。但如果我只是使用:

driver.find_elements_by_css_selector('section[id="education"] div[class="school"]')
driver.find_elements_by_css_selector('section[id="education"] p[class="year"]')

我会得到两个列表:[School1, School2]['2002-2008'],我将无法确定哪个学校对应于年份范围'2002-2008'。那么,是否可以将相应的学校名称和年份范围组合在一起?如果还有其他方法可以绕过它,它也会有所帮助。

1 个答案:

答案 0 :(得分:3)

您必须遍历.degree标记并成对提取所需的信息。以下是正常方法:

education = driver.find_element_by_id("education")
for degree in education.find_element_by_class_name("degree"):
    school = degree.find_element_by_class_name("school")
    year = degree.find_element_by_class_name("year")
    print(school.text, year.text)

以下是使用CSS选择器的方法:

for degree in driver.find_elements_by_css_selector("#education .degree"):
    school = degree.find_element_by_css_selector(".school")
    year = degree.find_element_by_css_selector(".year")
    print(school.text, year.text)

注意:正如@Andersson所评论的那样,如果使用{{3}中提到的方法之一可能遗漏了元素(.year.school),则应该检查它们是否存在}。否则,此代码可能会抛出NoSuchElementException