1. 前言
在html标签中,经常会遇到下拉框和单、多选框的组件,在之前的元素定位方法中,一般是选用 find_element 方法来定位某个特定的对象,但如果我们要定位一组对象时,这时我们就需要应用到层级定位和find_elements来定位了。
2. 操作举例
2.1 下拉框处理
下拉框如下图所示:
下拉框部分html代码如下:
<html>
<body>
<select id="shopping" name="Shopping">
<option value="20%">20%</option>
<option value="30%">30%</option>
<option value="40%">40%</option>
<option value="50%">50%</option>
<option value="60%">60%</option>
<option value="70%">70%</option>
<option value="80%">80%</option>
<option value="90%" selected="">90%</option>
</select>
</body>
</html>
根据网页上的html标签,根据元素定位方法和层级定位的方式,逐级定位:
# -*- coding:utf-8 -*-
from selenium import webdriver
#方式一:
#先定位到下拉框
m_driver=driver.find_element_by_id('shopping')
#再定位到下拉列表,选择80%的选项
m_driver.find_element_by_xpath("//option[@value='80%']]").click()
#方式二:
#在一行中同时定位到想要的元素
driver.find_element_by_id('shopping').find_element_by_xpath("//option[@value='80%']]").click()
#方式三:
#直接使用xpath进行定位,并选择80%的选项
driver.find_element_by_xpath("//select[@id='shopping']]/option[7]]").click()
2.2 多选框处理
多选框处理:即可以同时选择多个选项,如下图所示:
多选框的部分html代码如下:
<html>
<body>
<div class="shell">
<form class="form-1">
<div class="control-group">
<label class="wt" for="c1">外套</label>
<div class="controls">
<input type="checkbox" id="la1" />
</div>
</div>
<div class="control-group">
<label class="cy" for="c2">衬衣</label>
<div class="controls">
<input type="checkbox" id="la2" />
</div>
</div>
<div class="control-group">
<label class="kz" for="c3">裤子</label>
<div class="controls">
<input type="checkbox" id="la3" />
</div>
</div>
</form>
</body>
</html>
对于多选框,我们要先找出多选框的所有元素,使用find_elements 来获取所有元素:
# -*- coding:utf-8 -*-
from selenium import webdriver
#方式一:
# 选择页面上所有的 tag name 为 input 的元素
inputs = driver.find_elements_by_tag_name('input')
#然后从中过滤出 tpye 为 checkbox 的元素,单击全部勾选
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
#方式二:
# 选择所有的 type 为 checkbox 的元素并单击全部勾选
checkboxes = driver.find_elements_by_xpath(".//*[@type='checkbox']")
for checkbox in checkboxes:
checkbox.click()
# 打印当前页面上 type 为 checkbox 的个数
print len(driver.find_elements_by_xpath(".//*[@type='checkbox']"))
# 把页面上最后1个 checkbox 的勾给去掉
driver.find_elements_by_xpath(".//*[@type='checkbox']").pop().click()
2.3 单选框处理
单选框顾名思义只能选择一个选项,如下图所示:
单选框的部分html代码如下:
<html>
<body>
</form>
<h4>单选:性别</h4>
<form id='form_id'>
<label value="radio">男</label>
<input name="sex" value="male" id="boy" type="radio"><br>
<label value="radio1">女</label>
<input name="sex" value="female" id="girl" type="radio">
</form>
</body>
</html>
对于单选框,我们可以通过元素定位直接获取元素:
# -*- coding:utf-8 -*-
from selenium import webdriver
# 单选框的话,只要定位到该元素直接点击即可
driver.find_element_by_id('boy').click()
#判断是否被选定
driver.find_element_by_id("boy").is_selected()
欢迎关注「技术分享交流」公众号 ,在公众号里会不定期更新干货内容,欢迎您的加入!