• selenium键盘鼠标事件ActionChains


    说明:本篇博客基于selenium 4.1.0

    ActionChains说明

    ActionChains都是selenium的一个模块,提供模拟鼠标动作和键盘动作的功能


    ActionChains使用方法

    # 步骤1:实例化一个ActionChains动作容器
    actions = ActionChains(driver, 250)
    
    # 步骤2:往动作容器中依次添加动作
    actions.click(ele_click)                              # 调用的动作都会添加到动作容器中
    actions.click_and_hold(ele_drag).release(ele_item2)   # 链式添加动作。每个动作返回值为容器对象,因此支持链式连续添加
    
    # 步骤3:执行动作
    actions.perform()
    

    ActionChains动作列表

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains, Keys
    from selenium.webdriver.common.by import By
    
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    
    # 创建动作容器
    actions = ActionChains(driver, 250)
    
    
    # 等待
    n = 3
    actions.pause(n)          # 插入在动作中,强制暂停n秒
    
    
    # 鼠标点击
    driver.get('http://sahitest.com/demo/clicks.htm')
    ele_click = driver.find_element(By.CSS_SELECTOR, '[value="click me"]')
    ele_dclick = driver.find_element(By.CSS_SELECTOR, '[value="dbl click me"]')
    ele_rclick = driver.find_element(By.CSS_SELECTOR, '[value="right click me"]')
    
    actions.click(ele_click)              # 单击,ele_click非必传
    actions.double_click(ele_dclick)      # 双击,ele_click非必传
    actions.context_click(ele_click)      # 右键点击,ele_click非必传
    
    
    # 鼠标移动
    driver.get("https://www.baidu.com/")
    ele_set = driver.find_element(By.ID, "s-usersetting-top")
    
    actions.move_to_element(ele_set)                           # 移动鼠标到元素
    x, y = 30, 60
    actions.move_by_offset(x, y).context_click()               # 以浏览器左上角为原点,鼠标向下向右移动(x,y)距离
    actions.move_to_element_with_offset(ele_set, x, y)         # 以元素左上角为原点,鼠标向下向右移动(x,y)距离
    
    # 鼠标拖动
    driver.get("http://sahitest.com/demo/dragDropMooTools.htm")
    ele_drag = driver.find_element(By.ID, "dragger")
    ele_item1 = driver.find_element(By.XPATH, "//div[text()='Item 1']")
    ele_item2 = driver.find_element(By.XPATH, "//div[text()='Item 2']")
    ele_item3 = driver.find_element(By.XPATH, "//div[text()='Item 3']")
    
    actions.drag_and_drop(ele_drag, ele_item1)                                # 拖动元素ele_drag到ele_item1
    actions.click_and_hold(ele_drag).release(ele_item2)                       # 点住元素ele_drag,在ele_item1处释放鼠标
    actions.click_and_hold(ele_drag).move_to_element(ele_item3).release()     # 点住元素ele_drag,移动鼠标到ele_item1处,释放鼠标
    x, y = 30, 60
    actions.drag_and_drop_by_offset(ele_drag, x, y)                           # 拖动元素ele_drag到坐标(x,y)
    
    # 键盘按键
    driver.get("https://www.baidu.com/")
    ele_input = driver.find_element(By.ID, "kw")
    
    actions.send_keys("baidu", Keys.SPACE, '啦啦啦')     # 连续输入
    actions.key_down('a').key_up('a')                   # 键盘按下a,键盘释放a
    actions.send_keys_to_element(ele_input, 'aaa')      # 在元素处输入,可支持连续输入
    
    
    # 容器相关
    actions.reset_actions()   # 清空动作容器
    actions.perform()         # 按顺序开始执行动作
    
    
    time.sleep(5)
    driver.quit()
    

    更多技术文章

  • 相关阅读:
    Vue企业微信扫码登录
    Win11安装redis 数据库以及redis desktop manager的下载
    验证回文串
    RT-Thread 双向链表(学习笔记)
    加速企业AI实施:成功策略和效率方法
    弹性盒子自动换行小Demo
    jvm内存和线程信息查看
    每日五道java面试题之spring篇(二)
    【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题
    【探索Linux】文件描述符 | 重定向 | 基础IO —— 强大的命令行工具 P.12
  • 原文地址:https://blog.csdn.net/Tester_muller/article/details/127070259