selenium之下拉框选择(有select标签和没有select标签)
1、有select标签的下拉框处理
1.1、导入的模块/类(Select)
from selenium.webdriver.support.select import Select # 或 from selenium.webdriver.support.ui import Select # 两者功能一样,选其一即可,没有本质的区别
1.2、Select中有三种选择下拉框选择的方法
通过索引选择(从0开始):select_by_index(索引)
通过属性的值(option标签的属性的值)选择:select_by_value(值)
通过文本选择(下拉框的选项的文本):select_by_visible_text(文本)
1.3、Select查看各个选项
options:查看所有选项(包括已选和未选,即查看下拉框的所有选项)
is_multiple:查看下拉框是否已经多选
all_select_options:查看所有已选选项
first_select_option:查看第一个已选(若有多个已选,则为第一个已选选项;单选则只有唯一一个)
代码示例:
# 导入需要的模块Select()类是用来管理下拉框的 from selenium import webdriver from selenium.webdriver.support.select import Select import time # 创建浏览器对象 driver = webdriver.Firefox() driver.maximize_window() # 访问贴吧的高级搜素 driver.get('https://tieba.baidu.com/f/search/adv') # 定位到下拉框元素 el_select = driver.find_element_by_name('rn') # 创建一个下拉框对象 xialakuang = Select(el_select) # 三种方法选择下拉框选项 # 第一、通过选项的索引来选定选项(索引从0开始算) xialakuang.select_by_index(0) time.sleep(1) xialakuang.select_by_index(2) time.sleep(1) xialakuang.select_by_index(1) time.sleep(1) # 第二种方法:通过option标签的属性值选择 xialakuang.select_by_value('20') time.sleep(1) xialakuang.select_by_value('10') time.sleep(1) xialakuang.select_by_value('30') time.sleep(1) # 第三种:通过文本选择(下拉框的值) xialakuang.select_by_visible_text('每页显示20条') time.sleep(1) xialakuang.select_by_visible_text('每页显示10条') time.sleep(1) xialakuang.select_by_visible_text('每页显示30条') time.sleep(1) # 打印选择的文本 # 查看第一个已选(若有多个已选则打印第一个,只有一个已选则打印一个) print(xialakuang.first_selected_option.text) # 打印所有已选的选项的文本 yixuan = xialakuang.all_selected_options for i in yixuan: print('已选',i.text) # 打印是否是多选 print(xialakuang.is_multiple) # 打印所有选项(包括已选和未选的) m_list = xialakuang.options for a in m_list: print('选项',a.text) # 关闭浏览器 driver.quit()
1.4、取消选择
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
前面三种分别对应前面的选择选项的取消;deselect_all()方法用于多选下拉框,全部取消所有选择
2、没有select标签的下拉框处理
若下拉框无select标签,意味着不能使用Select模块处理下拉框;
2.1、此时可以用到elements定位方法获取下拉框元素组,然后再从元素组里一个一个用索引方法选择,然后点击选择,如下代码:
from selenium import webdriver # 导入Select类,用于处理下拉框(标签名必须是select否则此模块无法使用) from selenium.webdriver.support.select import Select import time # 创建一个浏览器对象 driver = webdriver.Firefox() # 访问百度 url = 'http://www.baidu.com' driver.get(url) # 定位到设置按钮并执行点击操作 s = driver.find_element_by_id('s-usersetting-top') s.click() # 定位到高级搜素并点击 sous = driver.find_element_by_css_selector('.s-user-setting-pfmenu > a:nth-child(2)') sous.click() # 获取下拉框下拉按钮 xiala = driver.find_element_by_css_selector('.adv-gpc-select > div:nth-child(1) > span:nth-child(1)') xiala.click() time.sleep(3) # 获取下拉框选项结果集 sous_list = driver.find_elements_by_css_selector('.adv-gpc-select > div:nth-child(2) > div:nth-child(2) > p') print(sous_list) time.sleep(3) # 选择一个选项、 sous_list[3].click() time.sleep(1) xiala.click() sous_list[1].click() time.sleep(1) xiala.click() sous_list[2].click() time.sleep(1) xiala.click() sous_list[4].click() time.sleep(1) xiala.click() sous_list[0].click() time.sleep(3) driver.quit()
2.2、还可以直接使用xpath定位直接定位到需要选择的元素,然后点击,与2.1内容相似