selenium之下拉列表,鼠标,键盘操作

  1. 下拉列表操作 —> Select类
  2. 鼠标操作 —> ActionChains类
  3. 键盘操作 —> Key类

selenium当中的元素,有4个基本的操作

  1. click() —>点击
  2. send_keys() —->输入文本
  3. WebElement对象.text —->获取文本内容
  4. WebElement对象.get_attribute(属性名称) —->获取属性的值
  1. 详解操作下拉列表
    下拉列表操作出现的场景:
    1. select/option
      引入Select类: from selenium.webdriver.support.ui import Select
      Select类来处理select/option元素
      可以通过value,index(下标),text(文本内容)三种方式选择option对应的值。
    2. ui/li
      鼠标悬浮–》选择下拉列表的数据–》ctrl+shift+c 定位
      操作流程:
    3. 菜单栏-点击其中的某一链接跳转
    4. 在下拉列表中选择某一值
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      # select/option 部分代码
      from selenium.webdriver.support.ui import Select
      from time import sleep
      # 1. 找到select元素对象,实例化Select类。
      s = Select(driver.find_element_by_xpath('定位代码'))
      # 2. 选择下拉列表的值。
      # 2.1 通过value属性值
      sleep(2)
      s.select_by_value('value的值')
      # 2.2 通过index下标
      sleep(2)
      s.select_by_index(1) # 下标从0开始
      # 不同点: iframe 下标从1开始
      # 2.3 通过text文本内容
      sleep(2)
      s.select_by_text('text文本内容')
  1. 详解操作鼠标
    主要操作流程:
    1. 引入ActionChains类(from selenium.webdriver.common.action_chains import ActionChains)
    2. 存储鼠标操作
    3. perform()来执行鼠标操作 这是逻辑(必须要带着 否则无法执行)
      主要的操作方法:
    4. move_to_element() —>鼠标悬浮
    5. drag_and_drop() —>拖拽
    6. context_click() —>右键操作
    7. double_click() —>双击操作
    8. reset_actions() —>重置
    9. click_and_hold() —>按着左键,不松开
    10. click() —>点击
    11. release() —>释放(这是实现逻辑,就像perform()函数一样)
    12. send_keys() —>输入操作
    13. pause() —>暂停
    14. 滚动—>用js实现
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      # 前提是: 先找到要操作的元素
      # 1. 实例化鼠标类
      # 2. 调用各种鼠标行为
      # 3. 调用perform()方法去执行鼠标操作

      # 悬浮的数据如何定位?如何定位下拉列表的数据?----->
      1. 执行过程中: f12-->source-->右侧的暂停的图标(使用的场景:定位捕获异常:比如账号密码输入错误,有短暂的弹出提示)
      2. ctrl+shift+c(悬浮元素-》选中下拉的数据 -》ctrl+shift+c -》松开之后,再移动下)
      3. 点击悬浮元素->点击下拉数据-->右键-->检查

      from selenium.webdriver.common.action_chains import ActionChains
      ele = driver.find_element_by_xpath('定位代码')

      ActionChains(driver).move_to_element(ele).click(ele).perform() # 这是优化后精简的写法代码(推荐该方法)
      # 下一步:等待

      # ActionChains(driver).move_to_element(ele).click(ele).perform()代码类似于以下代码:
      # ele = driver.find_element_by_xpath('定位代码')
      # ac = ActionChains(driver) # 实例化
      # ac.move_to_element(ele) # 悬浮
      # ac.click() # 点击
      # ac.perform() # 执行鼠标操作
  1. 详解操作键盘
    需要引入Key类–》from selenium.webdriver.common.keys import Keys
    1. 组合键
      1. 全选(ctrl+a):send_keys(Keys.CONTROL,’a’)
      2. 复制(ctrl+c):send_keys(Keys.CONTROL,’c’)
      3. 粘粘(ctrl+v):send_keys(Keys.CONTROL,’v’)
      4. 剪切(ctrl+x):send_keys(Keys.CONTROL,’x’)
    2. 常用的非组合键
      1. 回车键:Keys.ENTER
      2. 删除键:Keys.BACK_SPACE
      3. 空格键:Keys.SPACE
      4. 制表键:Keys.TAB
      5. 回退键:Keys.ESCAPE
      6. 刷新键:Keys.F5
    3. js之操作滚动
      1. 可见/视区域–> 为什么要滚动到可见区域?原因:先滚动到你要操作的元素,让其可见,然后再进行操作。
      2. 大部分系统在元素操作时,如果元素不在可见区域,随着操作会自动到可见区域 。
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        from selenium import webdriver
        driver = webdriver.Chrome()
        ele = driver.find_element_by_xpath('定位代码')
        driver.execute_script("arguments[0].scrollIntoView();",ele) # 页面顶端
        driver.execute_script("arguments[0].scrollIntoView(false);",ele) # 页面底端
        driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 移动到页面底部
        driver.execute_script("window.scrollTo(document.body.scrollHeight,0)") # 移动到页面顶部

        例如:
        from selenium import webdriver
        from selenium.webdriver.support.wait import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC
        from selenium.webdriver.common.by import By
        from time import sleep

        driver = webdriver.Chrome()
        driver.implicitly_wait(20)
        driver.maximize_window()
        driver.get ('https://www.ketangpai.com/User/login.html') # 打开课堂派
        # 输入登录账号
        driver.find_element_by_xpath("//input[@name='account']").clear()
        driver.find_element_by_xpath("//input[@name='account']").send_keys('18871369')
        # 输入登录密码
        driver.find_element_by_xpath("//input[@name='pass']").clear()
        driver.find_element_by_xpath("//input[@name='pass']").send_keys('123456')
        # 点击登录按钮
        driver.find_element_by_xpath("//div[@class='padding-cont pt-login']//a[@class='btn-btn']").click()
        # 点击进入自己的课堂
        locator = (By.XPATH,"//a[@data-id='MDAwMDAwMDAwMLOspd2Gz79r']")
        WebDriverWait(driver,20).until(EC.visibility_of_element_located(locator))
        driver.find_element(*locator).click()

        ele = driver.find_element_by_xpath("//a[contains(text(),'2019-04-19')]")
        sleep(2)

        # driver.execute_script("arguments[0].scrollIntoView();",ele) # 滑动到顶端
        driver.execute_script("arguments[0].scrollIntoView(false);",ele) # 滑动到低端
        # driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 移动到页面底部
        # driver.execute_script("window.scrollTo(document.body.scrollHeight,0)") # 移动到页面顶部
        sleep(1)
        driver.find_element_by_xpath("//div[@data-id='MDAwMDAwMDAwMLSGtZaIub-y']//a[text()='查看成绩']").click()