zoukankan      html  css  js  c++  java
  • Selenium_模拟键盘和鼠标操作(9)

    模拟键盘键盘和鼠标操作主要使用到selenium的keys包,源码如下

    class Keys(object):
        """
        Set of special keys codes.
        """
    
        NULL = 'ue000'
        CANCEL = 'ue001'  # ^break
        HELP = 'ue002'
        BACKSPACE = 'ue003'
        BACK_SPACE = BACKSPACE
        TAB = 'ue004'
        CLEAR = 'ue005'
        RETURN = 'ue006'
        ENTER = 'ue007'
        SHIFT = 'ue008'
        LEFT_SHIFT = SHIFT
        CONTROL = 'ue009'
        LEFT_CONTROL = CONTROL
        ALT = 'ue00a'
        LEFT_ALT = ALT
        PAUSE = 'ue00b'
        ESCAPE = 'ue00c'
        SPACE = 'ue00d'
        PAGE_UP = 'ue00e'
        PAGE_DOWN = 'ue00f'
        END = 'ue010'
        HOME = 'ue011'
        LEFT = 'ue012'
        ARROW_LEFT = LEFT
        UP = 'ue013'
        ARROW_UP = UP
        RIGHT = 'ue014'
        ARROW_RIGHT = RIGHT
        DOWN = 'ue015'
        ARROW_DOWN = DOWN
        INSERT = 'ue016'
        DELETE = 'ue017'
        SEMICOLON = 'ue018'
        EQUALS = 'ue019'
    
        NUMPAD0 = 'ue01a'  # number pad keys
        NUMPAD1 = 'ue01b'
        NUMPAD2 = 'ue01c'
        NUMPAD3 = 'ue01d'
        NUMPAD4 = 'ue01e'
        NUMPAD5 = 'ue01f'
        NUMPAD6 = 'ue020'
        NUMPAD7 = 'ue021'
        NUMPAD8 = 'ue022'
        NUMPAD9 = 'ue023'
        MULTIPLY = 'ue024'
        ADD = 'ue025'
        SEPARATOR = 'ue026'
        SUBTRACT = 'ue027'
        DECIMAL = 'ue028'
        DIVIDE = 'ue029'
    
        F1 = 'ue031'  # function  keys
        F2 = 'ue032'
        F3 = 'ue033'
        F4 = 'ue034'
        F5 = 'ue035'
        F6 = 'ue036'
        F7 = 'ue037'
        F8 = 'ue038'
        F9 = 'ue039'
        F10 = 'ue03a'
        F11 = 'ue03b'
        F12 = 'ue03c'
    
        META = 'ue03d'
        COMMAND = 'ue03d'

    模拟键盘操作

    对元素定位后使用send_keys就可以模拟键盘输入了

    from time import sleep
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("https://www.baidu.com")
    el = driver.find_element_by_id("kw")
    el.send_keys("selenium")
    
    el.send_keys(Keys.CONTROL + 'a')    # ctrl+a,全选
    sleep(1)
    el.send_keys(Keys.CONTROL + 'c')    # ctrl+c,复制
    sleep(1)
    el.send_keys(Keys.CONTROL + 'v')    # ctrl+v,粘贴
    el.send_keys(Keys.CONTROL, 'v')     # + 和 , 同样效果
    sleep(1)
    el.send_keys(Keys.BACKSPACE)        # 退格健,删除文字

    键盘不止上面的操作,Keys中均能组合使用。

    模拟鼠标操作

    1、行为控制

    • perform --- 执行所有准备好的Action
    • reset_actions --- 清空所有准备好的Action  #  该方法在 selenium 3.141.0版本不生效
    • pause --- 设置Action之间的动作时间间隔

    2、鼠标操作

    • click --- 鼠标左键点击(可以指定或不指定元素对象)
    • click_and_hold --- 鼠标左键点击但不释放(可以指定或不指定元素对象)
    • release --- 释放鼠标点击动作(可以指定或不指定在目标元素对象上释放)
    • context_click --- 鼠标右键点击(可以指定或不指定元素对象)
    • double_click --- 鼠标左键双击(可以指定或不指定元素对象)
    • drag_and_drop --- 鼠标左键在两个元素之间拖拽
    • drag_and_drop_by_offset --- 鼠标左键拖拽元素到目标偏移位置
    • move_by_offset --- 鼠标移动指定偏移
    • move_to_element --- 鼠标移动到指定元素
    • move_to_element_with_offset --- 鼠标移动到指定元素的指定偏移位置

    在使用ActionChains类下面的方法之前,需要先引入ActionChains类

    from selenium.webdriver import ActionChains

    需要注意的是在实例化ActionChains类对象时需要把webdriver的实例对象当参数传入。
    ActionChains用于模拟用户的行为,所有的行为都存储在actionchains对象上,再通过perform()执行所有ActionChains中存储的行为。
    perform()同样也是ActionChains类提供的方法,通常与ActionChains()配合使用。

    3、键盘操作

    key_down --- 键盘按下
    key_up --- 键盘释放
    send_keys --- 向当前元素发送模拟按键
    send_keys_to_element --- 向指定元素发送模拟按键

    鼠标操作综合练习

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("https://www.baidu.com")
    
    actionChains = ActionChains(driver)
    time.sleep(2)
    
    
    # 单击鼠标左键,
    el = driver.find_element_by_xpath('//*[@id="u1"]/a')
    actionChains.click(el).perform()
    actionChains.reset_actions()    # reset_actions在selenium 3.141.0 版本不生效。预期清空保存在actionChains中的行为,但是实际没有清空。后面的操作都会重复执行前面加入的操作
    time.sleep(2)
    el = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__closeBtn"]')
    actionChains.click(el).perform()
    time.sleep(5)
    
    # 双击鼠标左键
    el = driver.find_element_by_xpath('//*[@id="hotsearch-refresh-btn"]')
    actionChains.double_click(el).perform()
    time.sleep(2)
    
    # 鼠标悬浮
    el = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
    actionChains.move_to_element(el).perform()
    time.sleep(2)
    
    
    # 单击鼠标右键
    el = driver.find_element_by_id("kw")
    actionChains.context_click(el).perform()
    actionChains.release().perform()
    time.sleep(2)

    实际使用过程中,发现很多健模拟不了,比如F5,F12。

  • 相关阅读:
    Android SeekBar 垂直滚动条实现——Kotlin
    百度地图JavaScript API——去除左下角LOGO
    C# Socket域名连接
    d
    WPF MVVM手敲简单框架
    WPF播放视频、WPF_MediaElement用法
    C#分割字符,Split(new char[2] { '$', ',' }); 和Split( new string[]{"$",","}, StringSplitOptions.RemoveEmptyEntries); 的小计
    使用CloudFlare给IPv6 VPS提供IPv4+6端口转发服务
    多线程处理和WPF访问UI
    MVC4Html Helper
  • 原文地址:https://www.cnblogs.com/testlearn/p/14379730.html
Copyright © 2011-2022 走看看