首页 > 解决方案 > 使用 Selenium 和 Python 从下拉列表中选择

问题描述

在SeleniumPython的帮助下。我想抓取一个有嵌套下拉菜单的网页。我只发布下面的嵌套部分:

<div class="dropDown active" data-dropdown-block="FOOTBALL_COMPSEASON" data-dropdown-default="All Seasons">
    <div class="label" id="dd-FOOTBALL_COMPSEASON">Filter by Season</div> 
    <div class="current" data-dropdown-current="FOOTBALL_COMPSEASON" role="button" tabindex="0" aria-expanded="false" aria-labelledby="dd-FOOTBALL_COMPSEASON" data-listen-keypress="true" data-listen-click="true">
        2018/19
    </div>
    <ul class="dropdownList" data-dropdown-list="FOOTBALL_COMPSEASON" role="listbox" aria-labelledby="dd-FOOTBALL_COMPSEASON" data-listen-keypress="true" data-listen-click="true">
        <li role="option" tabindex="0" data-option-name="All Seasons" data-option-id="-1" data-option-index="-1">
             All Seasons
        </li> 
        <li role="option" tabindex="0" data-option-name="2018/19" data-option-id="210" data-option-index="0">
            2018/19
         </li>
         <li role="option" tabindex="0" data-option-name="2017/18" data-option-id="79" data-option-index="1">
              2017/18
         </li>
         <li role="option" tabindex="0" data-option-name="2016/17" data-option-id="54" data-option-index="2">
             2016/17
         </li>
    </ul>
</div>

这是它的外观截图:

所以,我想让爬虫点击下拉菜单并选择 2017/18。

我首先尝试了这个:

driver.get(_url)
select_element = driver.find_elements_by_class_name("dropdownList")[1]

由于该类dropdownList在 HTML 中被多次使用,而我想要的元素位于第二个位置,即<ul class="dropdownList"....第二次使用该类dropdown,所以我习惯于[1]获取第二个孩子。

但后来我得到这个错误:

文件“shots_2017_18.py”,第 15 行,在shots_2017_18 select_element = driver.find_elements_by_class_name("dropdownList") 1 IndexError: list index out of range

我应该更改或做什么,以便爬虫可以从下拉列表中选择 2017/18 项目并可以爬取?

标签: pythonseleniumweb-crawler

解决方案


在这种情况下,当您的索引超出范围时,这意味着找到的元素是 None 或只有一个,因为您编写的代码是正确的,我认为您输入了错误的 URL。但是如果 URL 是正确的,那么您可以使用 XPATH 来查找您的适当元素。试试这个代码:

select_element = driver.find_element_by_xpath("//li[@data-option-name='2017/18']")

推荐阅读