python - 使用 Selenium 和 Python 从下拉列表中选择
问题描述
在Selenium和Python的帮助下。我想抓取一个有嵌套下拉菜单的网页。我只发布下面的嵌套部分:
<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 项目并可以爬取?
解决方案
在这种情况下,当您的索引超出范围时,这意味着找到的元素是 None 或只有一个,因为您编写的代码是正确的,我认为您输入了错误的 URL。但是如果 URL 是正确的,那么您可以使用 XPATH 来查找您的适当元素。试试这个代码:
select_element = driver.find_element_by_xpath("//li[@data-option-name='2017/18']")
推荐阅读
- ethereum - 从新创建的帐户中使用 web3 调用合约方法
- twitter-bootstrap-3 - Bootstrap toggle brings up only the first element in the list
- html - 禁用在悬停时显示元素的链接
- algorithm - 为什么我们在矩阵链乘法中使用三个循环?
- python - 我需要构造一个特定的矩阵,其中一些元素本身就是矩阵 [python]。块三对角矩阵
- http - http2实现中的PRI方法导致问题
- c++ - 当作用域消失时,我们如何通过引用返回变量
- python - 我应该使用哪种类型的绘图来进行扑克资产可视化?
- c# - 文本块为空
- python - 如何设置使用 python opencv 捕获视频的时间?