zoukankan      html  css  js  c++  java
  • selenium--键盘操作

    前戏

    上篇文章说了selenium里的鼠标事件,在自动化中,键盘事件也是非常重要的,比如我们需要按回车键,ctrl+c复制等等操作,都离不开键盘事件,在selenium中,提供了Keys方法来供我们操作键盘

    Keys

    使用键盘完成复制,剪切,粘贴的功能

    # 在百度搜索框输入  python ,复制粘贴搜狗输入框进行搜索
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    driver.maximize_window()
    driver.find_element_by_css_selector('#kw').send_keys('python')
    sleep(2)
    driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'a')  # 全选
    driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'c')  # 复制
    driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'x')  # 剪切
    sleep(2)
    driver.get('http://www.sogou.com')
    driver.find_element_by_css_selector('.sec-input').send_keys(Keys.CONTROL, 'v')  # 粘贴
    sleep(2)
    driver.find_element_by_css_selector('#stb').click()
    sleep(2)
    driver.quit()

    常用的按键

    NULL = 'ue000'
        CANCEL = 'ue001'  # ^break
        HELP = 'ue002'
        BACKSPACE = 'ue003'
        BACK_SPACE = BACKSPACE   #删除键
        TAB = 'ue004'   #TAB键
        CLEAR = 'ue005'  
        RETURN = 'ue006'
        ENTER = 'ue007'   #回车键
        SHIFT = 'ue008'   #Shift键
        LEFT_SHIFT = SHIFT
        CONTROL = 'ue009'
        LEFT_CONTROL = CONTROL   #Ctrl 键
        ALT = 'ue00a'           #Alt 键
        LEFT_ALT = ALT
        PAUSE = 'ue00b'
        ESCAPE = 'ue00c'   #ECS键
        SPACE = 'ue00d'    #空格键 
        PAGE_UP = 'ue00e'   #PgUp 键
        PAGE_DOWN = 'ue00f' #PgDwon 键
        END = 'ue010'    #END 键
        HOME = 'ue011'   #HOME 键
        LEFT = 'ue012'  #左键
        ARROW_LEFT = LEFT  
        UP = 'ue013'    #上键
        ARROW_UP = UP   
        RIGHT = 'ue014'
        ARROW_RIGHT = RIGHT  #右键
        DOWN = 'ue015'      #下键
        ARROW_DOWN = DOWN  
        INSERT = 'ue016'    #insert键 
        DELETE = 'ue017'    #del键
    
        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'
    View Code

    例子2

    from selenium import webdriver
    import unittest, time
    from selenium.webdriver.common.keys import Keys
    
    
    class Test_dragpage(unittest.TestCase):
        def test_dragpageElement(self):
            url = 'http://www.sogou.com'
            self.driver = webdriver.Chrome()
            self.driver.get(url)
            self.driver.maximize_window()
            query = self.driver.find_element_by_id('query')
            # 通过WebDriver发送一个f12键
            query.send_keys(Keys.F12)
    
            time.sleep(5)
            # 在按次f12
            query.send_keys(Keys.F12)
            query.send_keys('selenium')
            # 按回车
            query.send_keys(Keys.ENTER)
    
    
    time.sleep(3)
    
    test1 = Test_dragpage()
    test1.test_dragpageElement()

    通过WebDriver内建的模块模拟组合键

    from selenium import webdriver
    import unittest, time
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    
    class Test_dragpage(unittest.TestCase):
        def test_dragpageElement(self):
            url = 'http://www.baidu.com'
            self.driver = webdriver.Chrome()
            self.driver.get(url)
    
            input = self.driver.find_element_by_id('kw')
            input.send_keys('python')
    
            ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
            time.sleep(2)
    
            ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform()
            self.driver.get(url)
            self.driver.find_element_by_id('kw').click()
    
            ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
    
            self.driver.find_element_by_id('su').click()
    
    
    test1 = Test_dragpage()
    test1.test_dragpageElement()

    ActionChains(self.driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform(),这行代码中,key_down(Keys.CONTROL)表示按下ctrl键,send_keys('v')类似模拟了V键,组合起来就是Ctrl+v,而key_down(Keys.CONTROL)表示释放Ctrl键

    通过第三方库进行操作

    需要安装pywin32

    键盘映射表

    VK_CODE = {'backspace':0x08,
               'tab':0x09,
               'clear':0x0C,
               'enter':0x0D,
               'shift':0x10,
               'ctrl':0x11,
               'alt':0x12,
               'pause':0x13,
               'caps_lock':0x14,
               'esc':0x1B,
               'spacebar':0x20,
               'page_up':0x21,
               'page_down':0x22,
               'end':0x23,
               'home':0x24,
               'left_arrow':0x25,
               'up_arrow':0x26,
               'right_arrow':0x27,
               'down_arrow':0x28,
               'select':0x29,
               'print':0x2A,
               'execute':0x2B,
               'print_screen':0x2C,
               'ins':0x2D,
               'del':0x2E,
               'help':0x2F,
               '0':0x30,
               '1':0x31,
               '2':0x32,
               '3':0x33,
               '4':0x34,
               '5':0x35,
               '6':0x36,
               '7':0x37,
               '8':0x38,
               '9':0x39,
               'a':0x41,
               'b':0x42,
               'c':0x43,
               'd':0x44,
               'e':0x45,
               'f':0x46,
               'g':0x47,
               'h':0x48,
               'i':0x49,
               'j':0x4A,
               'k':0x4B,
               'l':0x4C,
               'm':0x4D,
               'n':0x4E,
               'o':0x4F,
               'p':0x50,
               'q':0x51,
               'r':0x52,
               's':0x53,
               't':0x54,
               'u':0x55,
               'v':0x56,
               'w':0x57,
               'x':0x58,
               'y':0x59,
               'z':0x5A,
               'numpad_0':0x60,
               'numpad_1':0x61,
               'numpad_2':0x62,
               'numpad_3':0x63,
               'numpad_4':0x64,
               'numpad_5':0x65,
               'numpad_6':0x66,
               'numpad_7':0x67,
               'numpad_8':0x68,
               'numpad_9':0x69,
               'multiply_key':0x6A,
               'add_key':0x6B,
               'separator_key':0x6C,
               'subtract_key':0x6D,
               'decimal_key':0x6E,
               'divide_key':0x6F,
               'F1':0x70,
               'F2':0x71,
               'F3':0x72,
               'F4':0x73,
               'F5':0x74,
               'F6':0x75,
               'F7':0x76,
               'F8':0x77,
               'F9':0x78,
               'F10':0x79,
               'F11':0x7A,
               'F12':0x7B,
               'F13':0x7C,
               'F14':0x7D,
               'F15':0x7E,
               'F16':0x7F,
               'F17':0x80,
               'F18':0x81,
               'F19':0x82,
               'F20':0x83,
               'F21':0x84,
               'F22':0x85,
               'F23':0x86,
               'F24':0x87,
               'num_lock':0x90,
               'scroll_lock':0x91,
               'left_shift':0xA0,
               'right_shift ':0xA1,
               'left_control':0xA2,
               'right_control':0xA3,
               'left_menu':0xA4,
               'right_menu':0xA5,
               'browser_back':0xA6,
               'browser_forward':0xA7,
               'browser_refresh':0xA8,
               'browser_stop':0xA9,
               'browser_search':0xAA,
               'browser_favorites':0xAB,
               'browser_start_and_home':0xAC,
               'volume_mute':0xAD,
               'volume_Down':0xAE,
               'volume_up':0xAF,
               'next_track':0xB0,
               'previous_track':0xB1,
               'stop_media':0xB2,
               'play/pause_media':0xB3,
               'start_mail':0xB4,
               'select_media':0xB5,
               'start_application_1':0xB6,
               'start_application_2':0xB7,
               'attn_key':0xF6,
               'crsel_key':0xF7,
               'exsel_key':0xF8,
               'play_key':0xFA,
               'zoom_key':0xFB,
               'clear_key':0xFE,
               '+':0xBB,
               ',':0xBC,
               '-':0xBD,
               '.':0xBE,
               '/':0xBF,
               '`':0xC0,
               ';':0xBA,
               '[':0xDB,
               '\':0xDC,
               ']':0xDD,
               "'":0xDE,
               '`':0xC0}
    View Code
    import win32api
    import win32con
    
    class KeyboardKeys(object):
        #模拟键盘按键类
        VK_CODE={
            'enter':0x0D,
            'ctrl':0x11,
            'v':0x56
        }
    
        @staticmethod
        def keyDown(keyName):
            #按下按键
            win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,0,0)
    
    
        @staticmethod
        def keyUp(keyName):
            #释放按键
            win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)
    
    
        @staticmethod
        def oneKey(key):
            #模拟单个按键
            KeyboardKeys.keyDown(key)
            KeyboardKeys.keyUp(key)
    
        @staticmethod
        def twoKeys(key1,key2):
            #模拟两个组合键
            KeyboardKeys.keyDown(key1)
            KeyboardKeys.keyDown(key2)
            KeyboardKeys.keyUp(key2)
            KeyboardKeys.keyUp(key1)


    Keybd_event()共有四个参数:
    第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);
    第二个参数为扫描码,一般不用设置,用0代替就行;
    第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";
    第四个参数一般也是置0即可。

     调用
    KeyboardKeys.oneKey('enter')

    设置剪贴板

    在进行自动化的时候,有时候要上传一个文件,这时会打开一个wins的窗口,但是selenium没有给我们提供操作wins窗口的方法,我们就要使用pywin32提供给我们的方法来操作

    import win32clipboard as w
    import win32con
    
    
    class Clipboard(object):
        #模拟windows设置剪贴板
        #读取剪贴板
        @staticmethod
        def getText():
            #打开剪贴板
            w.OpenClipboard()
    
            #获取剪贴板中的数据
            d=w.GetClipboardData(win32con.CF_TEXT)
    
            #关闭剪贴板
            w.CloseClipboard()
    
            #返回剪贴板数据给调用者
            return d
    
    
    
        #设置剪贴板内容
        @staticmethod
        def setText(aString):
            #打开剪贴板
            w.OpenClipboard()
    
            #清空剪贴板
            w.EmptyClipboard()
    
            #将数据aString写入剪贴板
            w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
    
            #关闭剪贴板
            w.CloseClipboard()

    调用

     Clipboard.setText(filePath)
  • 相关阅读:
    mongodb分片集群报错261
    Galera集群安装报错Operation not permitted
    k8s部署php程序访问显示报错
    k8使用secret拉取镜像失败的问题
    nginx反向代理与负载均衡
    ---connet MPT device to PC under Ubuntu
    ----vysor
    ---su
    ---mysql utf8 设置
    ---Android logcat 记录日志
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11117719.html
Copyright © 2011-2022 走看看