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内容相似

 

posted @ 2020-08-11 23:27  吾言!  阅读(6993)  评论(0编辑  收藏  举报