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

  • 相关阅读:
    从源代码解释Android事件分发机制
    怎样让oracle实验本在不做实验时性能提升——win7下举例
    could only be replicated to 0 nodes, instead of 1
    虚拟机和主机ping不通解决的方法
    ZOJ3623:Battle Ships(全然背包)
    Android 网络编程之---HttpClient 与 HttpURLConnection 共用cookie
    注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机
    sharding-method首页、文档和下载
    rootsongjc/kubernetes-handbook: Kubernetes中文指南/实践手册
    如何基于K8S打造轻量级PaaS平台
  • 原文地址:https://www.cnblogs.com/will-wu/p/13488052.html
Copyright © 2020-2023  润新知